摘要:本文将带你了解小白进阶 10步搞定微信支付的扫码支付,希望本文对大家学微信有所帮助。
1.
先要有微信公众号,从公众号左侧菜单进入微信支付,要先申请微信支付,申请通过之后,即可使用,涉及到2个后台:公众号后台和支付平台后台
2.
首先要得到AppID(应用ID)和AppSecret(应用密钥),获取方法:公众号后台左侧菜单:开发-基本配置,显示密钥需要管理者的微信号扫描验证,另外要获取MCHID商户号(通过支付平台左侧菜单-账户信息可以看到)和KEY支付密钥https://pay.weixin.qq.com/index.php/account/api_cert,需要绑定手机号的短信验证
3.
配置好支付授权目录、测试授权目录、测试白名单(就是测试者的个人微信号),设置方式:公众号后台左侧菜单-微信支付-开发配置,注意:一般在网页上使用扫描支付的模式二(模式二先生成订单再生成二维码且只有2小时的时效性,模式一是先生成二维码,当用户扫描的时候才生成订单,适用户外广告投放等一次性显示无法改变的支付二维码,因为只需要一个产品id即可生成二维码,需在后台设置回调URL,以供当用户扫描二维码时用来生成订单,参考https://www.v2ex.com/t/239674),所以下方的扫码支付回调url可以忽略;授权目录必须到最底层目录
4.
到支付商户平台登录,可以查看到对应交易记录,并设置退款等操作,集成扫码付的时候无需用到
5.
获取官方的sdk示例:公众号后台左侧菜单-微信支付-使用教程,选择对应的支付方式获取即可,对应扫码支付,后面选择模式二来集成开发
6.
下载sdk后,里面有好几种模式,index.php中已经有链接,选择对应的支付方式即可看到效果,示例中的绑定的账户是微信官方测试账户,生成二维码的地址使用了在线地址,而非在本地
7.
先修改对应的appid、secret、回调地址(就是支付成功后,微信服务器来访问该地址,并带着是否支付成功的参数,这个地址需要判断支付状态,然后修改订单),MCHID商户号(通过支付平台左侧菜单-账户信息可以看到)和KEY支付密钥,在lib/WxPay.Config.php中,里面有对应注释
8.
在订单支付界面加入微信支付的二维码供用户手机微信扫描支付,sdk中的二维码代码可以直接使用的,显示二维码代码之后,该页面需设定一个ajax去查询订单状态(比如5秒/次,另外直接查询数据库订单状态也可,因为支付成功后,微信支付服务器会访问回调地址,而回调地址会改变订单状态的),查询到支付成功后,弹出对应提示或者做其他操作即可,如果不写ajax查询,用户无法得知支付是否成功
9.
回调地址做对应判断写业务逻辑即可
10.
到微信支付后台查看交易是否成功,到此微信支付开发完成
注意服务器端需要curl支持,以供程序向微信支付服务器post数据
吐槽一下:官方php的sdk示例里面各种class封装,明显过于封装,绕的太厉害了
开发文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html
其他的坑:
1.
调试的时候,大部分问题是出在php的curl访问微信支付服务器这个环节,经常出现500错误,所以要设置错误信息调试,开启log日志,查看开启方式,一些出错解决方案://my.oschina.net/kaykay012/blog/501602,着重讲一下WxPay.Api.php:修改文件WxPay.Api.php,具体如下:第537行左右:
2.
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
修改成:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//严格校验2
3.
4.
php的sdk中使用了一些函数,需要对应php版本,比如libxml_disable_entity_loader函数需要5.2.11及以上版本支持,如果要保持在php5.2系列,请使用最新的php5.2.17
5.
6.
sdk中的native提示“time_expire时间过短,刷卡至少1分钟,其他5分钟”,将sdk中的SetTime_expire注释,因为这个不是必需参数,模式二默认是2小时
7.
8.
可以直接使用sdk中提供的微信二维码地址来展示二维码,无需自己在服务器上生成二维码,方便了不少
9.
10.
个人遇到最大的一个坑,sdk中将libxml_disable_entity_loader设置成了true,禁止引用外部xml实体,而我刚好在回调url地址用了外部的soap,导致soap总是失败,解决方案是在soap前设置libxml_disable_entity_loader(false);这个问题浪费了我5个小时
11.
总结:千万别用官方sdk,用来参考,最好自己写,不然命都填进去了
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号