微信支付分为以下几步:
官网api地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
1,登录的时候,静默获取用户code,再用code获取用户openId,获取code的链接也是由微信提供的,只需要在页面已一加载的时候自动运行下以下链接即可,这个链接是死的,只有里面的openId和redirect_uri需要填写你自己的,链接如下:
window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=window.location.href&response_type=code&scope=snsapi_base&#wechat_redirect";
参数解读:
appid=appid(公众号唯一标识)
redirect_uri=window.location.href(授权后重定向的回调链接地址)
response_type=code(返回类型,无需更改)
scope=nsapi_base(snsapi_base ,不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo 弹出授权页 面,可通过openid拿到昵称、性别、所在地。)
state=STATE(重定向后会带上state参数,开发者可以填写任意参数值)
#wechat_redirect(无需更改)
这个时候你的页面刷新完之后,redirect_uri的url地址后面就会出现code,效果如下
code说明 :每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
2,登录成功,根据code换取openID
如何获取code就不在申明了,直接截取url后面的code,怎么样都可以,方法很多。
取到code之后,请求后台提供的接口,换取openID,
openId是用户在当前公众号下的唯一标识(‘身份证’),就是说通过这个openId,就能区分在这个公众号下具体是哪个用户
3,openID发给后台,以获取微信支付相关配置,getBrandWCPayRequest 里面的配置是从后台取得,这一块和后台协商即可
如下:
const that = this;
function onBridgeReady() {
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":that.state.data.appId, //公众号名称,由商户传入
"timeStamp":that.state.data.timeStamp,//时间戳,自1970年以来的秒数
"nonceStr":that.state.data.nonceStr, //随机串
"package":that.state.data.package, //预支付交易码
"signType":that.state.data.signType,//微信签名方式:
"paySign":that.state.data.paySign //微信签名
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
alert("支付成功");
that.props.history.push(RouterList.private);
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}else{
alert("支付失败,请重试");
}
}
);
};
4,把上面的代码封装到一个函数里面,点击支付的时候调用即可
总结:微信支付调起来不麻烦,麻烦的是后面的调试问题,推荐大家下载个微信开发者工具,用来调试,关于开发遇到的问题,有时间另开一贴,有问题欢迎随时评论,看到必回