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

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

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

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

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

微信h5支付

一、支付账号申请

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

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

此处有坑

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

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

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

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

 

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

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

二、支付环境配置

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

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

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

 

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

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

配置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地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。回跳页面展示效果可参考下图


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

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

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

 

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

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

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

四、支付回调

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

此处有坑 

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

sign验证时 注意转成大写

五、支付持续回调

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

 return sprintf("");

即可停止

 

 微信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去处理 以及处理回调信息了

 

 

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

 

转载于:https://www.cnblogs.com/longlonglong/p/9928904.html

你可能感兴趣的:(php支付走过的坑(微信篇 包含h5支付和app支付 注册 秘钥 环境等等配置))