一、公众号设置
- JS接口安全域名
- 添加前端、后端正式域名
- 在ngxin(前后端分离)或者Web根目录(非前后端分离) 设置校验文件
nginx设置方式
- 后端域名服务器均增加校验文件
location /MP_verify_wLP94rtTd0YPDAFT.txt {
txt中的内容即可
}
JS接口安全域名要求
设置JS接口安全域名后,公众号开发者可在该域名下调用微信开放的JS接口。注意事项:
1、可填写五个域名或路径(例:wx.qq.com或wx.qq.com/mp),需使用字> 母、数字及“-”的组合,不支持IP地址、端口号及短链域名。
2、填写的域名须通过ICP备案的验证。
3、 将文件MP_verify_wLP94rtTd0YPDAFT.txt(点击下载)上传至填写域名或路径指向的web服务器(或虚拟主机)的目录(若填写域名,将文件放置在域名根目录下,例如wx.qq.com/MP_verify_wLP94rtTd0YPDAFT.txt;若填写路径,将文件放置在路径目录下,例如wx.qq.com/mp/MP_verify_wLP94rtTd0YPDAFT.txt),并确保可以访问。
4、 一个自然月内最多可修改并保存五次,本月剩余保存次数:5
-
网页授权域名
主要设置前端访问域名即可
-
开通商户号
-
微信支付关联商户号
二、支付设置
-
获取支付证书
1. 获取openId
通常以snsapi_base为scope发起的网页授权,就静默授权的,用户无感知
-
第一步用户同意授权,获取code
-
引导用户打开一下连接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
-
然后微信会重定向到redirect_uri ,如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
redirect_uri :为自定义的业务服务地址,该地址向微信后台发起第二步请求
-
-
第二步:通过code换取网页授权access_token,openId
-
获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
-
如果网页授权的作用域为
snsapi_base
,则本步骤中获取到网页授权access_token
的同时,也获取到了openid
-
-
第三步
- 详细见连接
-
出参
2. 统一下单API(预支付订单)
-
重点关注 **开发步骤支付目录设置 **
-
https://api.mch.weixin.qq.com/pay/unifiedorder
-
入参
- 详见
- 获取mchkey的页面
-
出参
3. 前端唤起微信支付(微信内)
-
通过统一下单获取前端唤起参数
-
主要是构建6个参数
-
appId timeStamp nonceStr package paySign signType
-
-
调用方式
-
function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"wx2421b1c4370ec43b", //公众号名称,由商户传入 "timeStamp":"1395712654", //时间戳,自1970年以来的秒数 "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串 "package":"prepay_id=u802345jgfjsdfgsdg888", "signType":"MD5", //微信签名方式: "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 }, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ){ // 使用以上方式判断前端返回,微信团队郑重提示: //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 } }); } if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }else{ onBridgeReady(); }
四、开发中遇到的问题
- redirect_url域名与后台配置不一致
- 由于“网页授权域名” 仅能配置2个,重点排查该位置的设置
- 改域名通常是请求微信API的域名,即后端地址,而非前端地址
五、 参考连接
-
相关SDK
https://github.com/Pay-Group/best-pay-sdk
-
微信公众号支付(一):获取用户openId_无颠-CSDN博客 https://blog.csdn.net/wskdxje2/article/details/82223401
13:58 -
java微信授权登录传参给redirect_uri 接口,回到原页面,传递多个参数https://www.cnblogs.com/daisygogogo/archive/2004/01/13/9364731.html
-
本地开发网址穿透工具
最好有正式备案宇敏,可以通过穿透工具代理到本地