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日志,查看开启方式,一些出错解决方案:http://my.oschina.net/kaykay012/blog/501602,着重讲一下WxPay.Api.php:修改文件WxPay.Api.php,具体如下:第537行左右:

    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
  2. php的sdk中使用了一些函数,需要对应php版本,比如libxml_disable_entity_loader函数需要5.2.11及以上版本支持,如果要保持在php5.2系列,请使用最新的php5.2.17

  3. sdk中的native提示“time_expire时间过短,刷卡至少1分钟,其他5分钟”,将sdk中的SetTime_expire注释,因为这个不是必需参数,模式二默认是2小时

  4. 可以直接使用sdk中提供的微信二维码地址来展示二维码,无需自己在服务器上生成二维码,方便了不少

  5. 个人遇到最大的一个坑,sdk中将libxml_disable_entity_loader设置成了true,禁止引用外部xml实体,而我刚好在回调url地址用了外部的soap,导致soap总是失败,解决方案是在soap前设置libxml_disable_entity_loader(false);这个问题浪费了我5个小时


总结:千万别用官方sdk,用来参考,最好自己写,不然命都填进去了

转载于:https://my.oschina.net/kmwzjs/blog/608501

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值