微信支付的准备工作

最近因为一些原因 另一个项目中不允许继续使用现在的支付账户 无奈只能重新申请一个微信支付账户, 申请下来后配置参数那里却懵逼了不知道去哪里找来对应的参数值 接口调用各种不通 乱七八糟的 现在整理下准备工作以及配置防止以后手忙脚乱


微信APP支付准备工作

注册开放平台

首先如果你需要申请 微信APP支付 需要登录 微信开放平台 链接地址:https://open.weixin.qq.com 没有账户的需要先注册

创建移动应用

管理中心 下 选择 创建移动应用 然后就是一套填写资料等审核通过

如果应用审核通过了 在应用详情中会有如下接口内容

AppPay Detail

其中 微信支付 一栏应该是没有开通的 后面会有点击开通 点击进去后就到了 微信支付的官网那边填资料啥的 然后等待审核通过

审核通过后 会受到一封邮件

WchatPay Success

改绑定的就绑定 然后记录下 应用APPID商户号 这个其实和你在 微信开放平台里 申请的移动应用的 APPID 是一致

操作证书配置

微信支付官网 链接:https://pay.weixin.qq.com 需要设置相关 支付 API参数 但是设置这些参数需要先安装 操作证书

第一步

nozhengshu1

第二步

nozhengshu2

到这里就完成了 操作证书 的安装

设置API密钥

要发起支付的话 还需要 设置密钥

nozhengshu3

nozhengshu4

下载API安全证书

讲下这个 API安全证书 做什么用的 在 微信支付接口中,涉及资金回滚的接口会使用到API证书,包括 退款撤销 接口 都会需要用到这个证书

nozhengshu5

在下面这个位置 使用管理员账户下载下来 里面包含4个文件 apiclient_cert.p12,apiclient_cert.pem,apiclient_key.pem 和 一个说明文件

这里我们主要用到了 2个 pem 文件

至此 微信APP支付 相关配置已经搞定

微信H5支付

以前申请微信的H5支付审核比较严格 现在已经全面开放了 只需要申请开通即可 因为 微信H5支付 是在微信外的普通手机浏览器中调起微信然后发起支付 底层用的参数和 微信APP支付 是一样的配置所以不需要设置什么了 唯一需要设置一个调用的域名地址即可

微信支付官网 控制台里的 产品中心->APPID授权管理 中 如下

wechatpay_set

在其中 H5支付 一项中添加你要发起支付的域名即可

H5支付常见错误说明

关于 微信H5支付 的一些常见错误提示 在官网已经列出来了 链接:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4 我在写下自己经常遇见的一些问题吧

1.网络环境未能通过安全验证,请稍后再试 遇到这个错误其实是在发起支付的时候传递的 IP 地址错误问题 需要获取 发起支付端公网IP地址 特别是在PHP里注意下获取到的IP地址是本地的还是公网的
2.商家参数格式有误,请联系商家解决 关于这个错误提示 其实是 Referer 丢失问题 就是你在请求最终的 H5支付 链接的时候没有传递 Referer 头信息导致 具体 Referer 丢失原因可以看我另一篇博客 地址: 这里 或者自行 Google
3.商家存在未配置的参数,请联系商家解决 关于这个错误 其实就是上一步中设置的域名地址 设置好就不会出现这个问题了

微信JS支付

顺便讲下 微信JS支付 的申请吧

首先公众号的官网 链接:https://mp.weixin.qq.com/ 注册登录老套路

然后需要建立 微信商户平台公众号 的绑定关系 链接地址见: https://pay.weixin.qq.com/static/pay_setting/appid_protocol.shtml

最后在 公众号平台->微信支付->商户号管理 中可以看到绑定关系 至此绑定完成

支付参数说明

上面的配置都是些准备工作 下面讲下在调用支付接口中的参数配置

最关键的4个参数

参数名 参数说明 长度 示例值
mchid 商户号 10 【不保证以后不会变】 1000000000
appid 应用APPID - APP支付和H5支付会用到 18 wxeef97e0000000000
mp_appid 公众号的appid 18 wxeef97e0000000000
pay_key 支付的API密钥-在微信商户平台设置的 32 x…x

奇葩问题

如果你不幸遇到了 mchid商户号与appid不匹配 这种报错

而且满足下面条件
1.想要发起微信APP支付 并配置正确
2.没有绑定公众号JS支付 也没有想过配置

如果是这种情况下 请直接把 mp_appid 的值设置成 appid 的值 他不会格外校验值是否正确 只要长度够就行了 我也不知道为什么


-------------The End-------------