位置: 编程技术 - 正文

php微信开发之带参数二维码的使用(php wechat)

编辑:rootadmin

推荐整理分享php微信开发之带参数二维码的使用(php wechat),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php微信开发代码,php如何开发小程序,php wechat,php wechat,php开发实战权威指南,微信 php sdk,微信php开发包,php微信开发代码,内容如对您有帮助,希望把文章链接给更多的朋友!

最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我的开发过程比较详细的记录下,希望对大家有所帮助。

我本次开发使用的是认证服务号。

1 接入首先进入微信公众号 -> 基本配置 下面是基本配置的页面,在URL中填写服务器地址,这个地址就是接受微信推送事件的一个接口,我是使用thinkPHP框架开发的程序,在其中一个Module(Decoration)的Action目录下新建一个类,比如叫: WechatAction.class.php ,在该Action中新建一个public方法,比如叫: URLRedirect() ,那么在这个URL中填写的就是 ,然后填写Token,Token随意填,EncodingAESKey要不要都行,然后点击确认,微信会往这个URL上发送一个get请求,里面包含很多参数,其中大部分都是让我们自己核对这次访问是不是微信服务器请求的,我自己没有验证,他的要求是如果我们核对成功,即原样返回get请求中的一个参数echostr,这里的返回不是return,也不是ajaxReturn,而使用echo,如果用thinkPHP开发的话,直接使用 echo I('echostr'); 即可。然后接口即验证成功了。

2 带参数二维码的作用微信的带参数二维码有两种,一种是临时二维码,一种是永久二维码,但是永久二维码的生成是有个数限制的,我这次要实现的功能是用户未登录的情况下在网站上使用产品,比如获得某商品的详细报价,但是又不想注册,然而又想保存这个报价单,这个时候网页可以生成一张二维码,用户只要用微信扫一扫这个二维码,官方公众号就会给这个用户发送一天图文消息,图文消息点开后就是用户刚刚获得的报价单,而且可以随时点击查看并且分享给朋友进行比价。所以临时二维码即可正常使用。上面是我是怎么使用的,下面介绍一下整个交互的流程:

当用户扫描这个二维码,如果用户关注了公众号,用户会直接进入与公众号的会话页面,微信服务器会给我们在上一步设置的服务器URL中推送一条消息,其中可以携带一个我们自定义的参数。如果用户未关注公众号,则用户首先会跳转到公众号关注页面,用户点击关注后,会直接进入公众号的会话页面,微信服务器这时也会给我们设置的URL推送一个事件消息,携带我们自定义参数,我们可以根据这个参数和事件类型做控制下一步动作。

3 具体开发过程

3.1 获取access_token这个access_token是我们程序调用微信接口的凭证,目前的有效期是秒,所以我们需要定时更新access_token。获得方法:方法 : GETurl : 其中的参数APPID和APPSECRET是我们公众号的APPID和APPSECRET,在微信公众号 -> 基本配置中可以查到,调用成功会返回如下JSON数据: {"access_token":"ACCESS_TOKEN","expires_in":}

其中access_token就是调用接口凭证,expire_in是token有效时间。我本人是把access_token存在数据库中,同时保存过期时间,然后封装公用函数 getWechatAccessToken() ,每次先检查access_token是否过期,如果过期则重新获取,否则直接使用数据库保存的access_token即可,我忘了在哪儿看加过,这个access_token每天的获取次数应该是有限制的。下面是 getWechatAccessToken() 的具体实现:

C('WECHAT_PUBLIC_GET_ACCESS_TOKEN') =

封装好这个之后,我们每次就可以安心的使用了。

.2 创建临时二维码

3.2.1 获取ticket3

请求方式: POST接口: {"expire_seconds": , "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": }}} 接口URL中的TOKEN即我们在3.1中获取的access_token,post数据中expire_seconds是二维码的有效时间,最多为天,action_name临时二维码的话固定就是QR_SCENE,scene_id即我们自定义参数,是个位非0整数,我在应用中把它设为订单的ID,微信服务器推送事件的时候会把这个值返回给我们设置的接口中,然后我会根据这个值去拿相应的订单数据展示在网页上,这是后话。

php微信开发之带参数二维码的使用(php wechat)

下面是封装的生成临时二维码的方法:

其中的方法 api_notice_increment() 是我封装的一个POST方法函数,我试过很多POST的方法,可能由于微信接口对POST方法和参数的限制比较严格,这个浪费了好久时间,最后在网上找到了一个可以使用的封装好的POST方法,建议大家先自己试试,如果微信返回错误吗,就用这个吧,起码我测试微信这个接口的时候用postman测试返回的都是错误,而且一定要用JSON字符串,一定要是非常严格的JSON字符串。下面是这个方法:

getTemporaryQrcode() 中有一个在配置文件中的参数给大家看下,其实就是微信接口链接: C('WECHAT_PUBLIC_GET_TEMPORARY_TICKET') =

这个接口的返回值是: {"ticket":"gQHjoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZsUwMEmm3sUw==","expire_seconds":,"url":"

其中ticket是让我们用来进行下一步调用的凭证,expire_seconds是二维码的有效期,url是我们生成的二维码扫描后打开的链接。所以如果我们自己实现了生成二维码的方法,就不用再进行下一步调用,我本人即在这一步就停止了,直接返回url的值,然后利用这个url的值生成二维码存在本地即可。PHP生成二维码可以使用phpqrcode,挺好用的。下一步也大致提一下:

3.2.2 获取二维码地址请求方式: GET接口: 这个接口的返回值是一张图片,可以直接展示或者下载,我们有具体使用过,所以也不知道应该怎么展示。

3.3 用户扫描二维码之后发生的事情 3.3.1 扫描后发生了什么上面提到了,用户扫描我们生成的临时二维码,如果用户未关注公众号,则首先会跳转到公众号的关注页面,点击关注后,会进入公众号的会话页面,同时会给我们设置的接口推送一个事件。如果用户已经关注了,用户微信会直接跳转到公众号会话页面,然后微信服务器会给我们设置的接口推送一个事件。

用户关注与否微信服务器给我们推送的事件是差不多的,只是新关注用户推送的事件中scene_id前面会加一个前缀。下面是微信公众平台文档的说明:

用户未关注时,进行关注后的事件推送

用户已关注时的事件推送

3.3.2 我们要做些什么

我们需要在自己填写的URL接口中接收这个事件,然后拿到我们需要的东西做我们想干的事儿。因为我要实现的功能比较简单,只需要拿到scene_id即可,因为这是我要展示给用户看的订单数据。下面是我写的接收和处理部分,比较简单,主要看一下应该怎么接收微信推送的事件:

我没有使用其他参数,只是根据不同的推送事件拿到我想要的订单ID,然后这时候其实相当于你在这里用公众号的客服在跟扫码的这个用户对话,上段代码中调用的sendMessage()是使用客户账号给扫码用户发送一个图文消息,因为我在拿scen_id的同时也拿到了用户的openid,可以利用这个给用户发送消息。

下面是sendMessage()方法:

其中 C('WECHAT_SEND_MESSAGE') = ' 至于下面的一大段str_replace,就是在组给用户发送的文字而已,需要注意$dataStr的格式,这里面要求JSON字符串比较严格,必须所有的字符串都用双引号括起来。微信接口对POST参数的限制真心严格。

下面是微信公众平台开发者文档中要求发送图文消息的POST data格式:

其中url是用户点击这个消息之后打开的地址,这个时候我就组了一个自己网站的地址,是一个get请求地址,里面携带参数是用户的openid和订单id,这样用户点击开图文消息就可以看到自己刚才下单的内容了,因为需要在网页上展示用户的微信头像和昵称,所以我把openid也放到参数里,在页面加载前先拿到用户的个人信息和订单数据,再展示网页。这样流程:用户未登录下单 -> 生成微信二维码 -> 用户扫码关注公众号 -> 查看订单详细信息 就完成了。而且因为这个图文消息打开后的链接携带的参数是这个用户的额openid和其下单的订单ID,不管分享到哪儿,用什么浏览器打开都是可以访问的,且展示的也是这个用户的头像和昵称信息,这也是我要实现的一个效果。

标签: php wechat

本文链接地址:https://www.jiuchutong.com/biancheng/301540.html 转载请保留说明!

上一篇:PHP支付系统设计与典型案例分享(php支付接口对接教程)

下一篇:浅析php如何实现App常用的秒发功能(php zmq)

  • 无效产权转移的契税需要征收吗?
  • 加工承揽属于劳务关系吗
  • 移动平均加权法是什么意思
  • 小规模租金可以按1%
  • 企业的筹建期允许有多长?
  • 企业裁员补偿金标准是多少
  • 电子发票怎么开具
  • 工程劳务费计入哪个会计科目
  • 存续小微企业
  • 发票丢失了能开红字发票吗
  • 不验旧可以领新车吗
  • 合伙企业季度所得税预缴不用纳税调整是吗
  • 会计报废怎么处理
  • 材料实际成本包括哪些内容
  • 季度企业所得税计算公式
  • 应收票据背书支付
  • 行政单位无法支付怎么办
  • 车间设备的维修费用什么科目
  • 营改增后还要交企业所得税吗
  • 已抵扣发票如何查询开票明细
  • 没有把发票开给客户公司注销了怎么办
  • 财税2018年39号公告残保金
  • 发票少开退回多付的货款怎么入账?
  • 向关联企业借款债资比
  • 增值税发票小数点后面小数不能打印
  • 电器维修公司买什么保险
  • 初中英语的学科知识与能力主要考什么
  • 存货的毁损通过什么科目核算
  • 民办非企业的财务会计制度是什么
  • php字符串赋值
  • PHP:Memcached::isPristine()的用法_Memcached类
  • win10开机强制进入修复模式
  • 购入材料的实际成本
  • 会计分录由什么要素组成
  • 银行同业利息 水利基金
  • vite怎么打包
  • 促销品的账务处理按售价算吗
  • 安装elementUI
  • 建行E信通贴现需要发票吗
  • 命令提示符用不了怎么办
  • 人工智能介绍200字
  • 员工预支款计入什么科目
  • map获取entry
  • 个人垫款公司将款支付个人算是资金回流吗
  • 生产车间用电的进项税额可以抵扣吗
  • 增值税发票用完后如何领取新的
  • 个体经营所得税核定征收2023税率
  • 农机合作社项目申报方案
  • 出售无形资产和固定资产计入什么科目
  • 商业汇票贴现条件有哪些
  • 2021年村级财务管理要点
  • 发票类别包含哪几种
  • 在建工程领用原材料税费怎么处理
  • 以前年度损益调整在利润表中怎么填
  • 原材料保险公司赔偿会计分录怎么写
  • 预提费用汇算清缴如何调整
  • 预付卡发票能不能走福利账户
  • 收入与成本不配合
  • 无票收入怎么做账,要交税吗,填入增值税申报表
  • 企业应当设立什么负责企业安全生产的日常监督管理工作
  • sql常用语句大全简书
  • win2008r2下载
  • 苹果mac安装
  • win10预览版21277
  • mac重装macos
  • RunClubSanDisk.exe是什么程序? 闪迪U盘广告推介程序
  • linux磁盘的使用方式
  • xp连接到共享打印机
  • linux查看sh
  • win8.1使用
  • Emeditor与dos(cmd)经典使用技巧之批量生成网页
  • 在bash shell环境下
  • shell脚本中判断入参是否为空
  • the oculus rift
  • android 自定义linearlayout 宽度计算不对
  • python读取大txt文件
  • 谷歌chrome浏览器网页版网址
  • android_zh
  • 个人所得税代扣代缴会计分录
  • 跨区域涉税事项报告表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设