php支付走过的坑(微信篇 包含h5支付和app支付 注册 秘钥 环境等等配置)

支付这东西,说容易也容易,说难也难

代码这玩意还比较好说 但是 如果没有demo 直接去看官方文档

十有八九一脸懵逼 今天就整理一下 支付这块走过的坑 涉及 微信h5支付 支付宝h5支付

(api文档真的是给人类看的么 手动滑稽)

微信h5支付

一、支付账号申请

既然说是h5支付 那就要走手机网页 

需要申请 微信公众号 和 微信商户号(相关材料注册时会提示)

此处有坑

微信商户号的注册地址不知为何 放的有点隐蔽

商户平台首页 -》 右上角帮助中心-》自助服务专区-》申请接入教程(新版)-》接入指引-》微信支付商户接入指引

-》找到立即申请 点击就可注册

放的这么里面 以至于 好几次都没发现 

 

另外 开通h5支付 不需要去注册微信开放平台 因为开放平台的网页应用只涉及微信登录

此外 微信公众号的支付功能也不需要开通 只需要开通商户 绑定公众号的appid即可

二、支付环境配置

支付环境需要在商户平台配置

首先开通产品大全下的支付产品

 

接着 去账户中心下的api安全配置

 

配置key

此处有坑

版本比较早的 Chrome 可能无法安装腾讯的安全控件 切换到ie环境即可

最后去产品中心查看appid是否和公众号的appid绑定 

 

三、支付代码

腾讯的h5支付没有sdk 验证 加密 验签 都需要自己来写

文档写的还算比较全

但是 还是有几处坑

支付完成的同步跳转(支持get形式传参)  正经的统一下单api接口没有提到

只是在开发步骤和常见问题里面提了一下

一、回调页面

正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数,来指定回调页面。

如,您希望用户支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理:

假设您通过统一下单接口获到的MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096


则拼接后的地址为MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn

注意:
  1.需对redirect_url进行urlencode处理

  2.由于设置redirect_url后,回跳指定页面的操作可能发生在:
  1,微信支付中间页调起微信收银台后超过5秒
  2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。回跳页面展示效果可参考下图


但是由于同步跳转无法判断用户是否支付完成

必须要手动让用户触发查单的申请 

 

 统一下单接口的sign生成也需要注意按照官方的排序和规则走

 提供下面这个官方的工具 支持验证sign是否生成正确

微信公众平台支付接口调试工具

四、支付回调

回调也是需要验证 sign 也就是把官方给的xml数据去除sign 处理后 生成新的sign 对比是否合法即可

此处有坑 

微信支付的金额都是以分为单位

sign验证时 注意转成大写

五、支付持续回调

支付持续回调需要在验证完数据之后 打印

 return sprintf("<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>");

即可停止

 

 微信app支付

app支付和h5支付相比 改变了些许参数 详细参数 统一下单文档

此处有坑

签名部分改动较大 从h5的签名一次 改为签名两次 且参数固定

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3

/**步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay**/

后面的步骤就是app去处理 以及处理回调信息了

 

 

不管支付回调验证成功与否 记得保存回调日志

 

posted @ 2018-04-15 14:33  long隆  阅读(422)  评论(0编辑  收藏  举报