微信商户申请开通:https://pay.weixin.qq.com/service_provider/index.shtml
注意:开通公众账号之后,然后根据流程开通相对应的商户平台
开发文档之模式1的流程图:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4
开发之前所需要的参数:
1、APP ID ,应用ID(在公众平台--基本配置模块中)
2、APP Sercret ,应用秘钥(在公众平台--基本配置模块中)
3、API Key,API的秘钥(在商户平台--API安全中设置)
4、mchID , 商户号(在公众平台---微信支付---商户信息)
5、order_api , 统一下单API的接口
6、notify_url 交易成功回调的接口的URL
7、redirect_uri JS网页获取code后重定向的地址
8、
barcode_api 物料二维码 (就是自己的一个接口,生产的二维码,比如我的链接
http://www.baidu.com/wallexxxx/api/jspai/xxxx.do 那么用户扫描二维码会进入我的这个接口的方法当中,在这个方法当中)
开发配置:
1、配置微信支付的授权域名(要具体到接口的上一级,比如我的接口为:http://www.baidu.com/wallexxxx/api/jspai/xxxx.do),所以我的配置为:http://www.baidu.com/wallexxxx/api/jspai
2、这里只要直接配置域名即可
3、这里也是配置域名
开发流程:
1、自己生成二维码(二维码的链接就是跳转到自己写的接口当中,
http://www.baidu.com/wallexxxx/api/jspai/xxxx.do )
2、在接口方法中,判断是否含有code? 如果没有code, 则重定向微信获取code的URL链接(https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect),改URL当中参数说明。
appid:APP ID
redirect_uri:获取code之后会重定向进入的页面或者接口,这里我们继续填
http://www.baidu.com/wallexxxx/api/jspai/xxxx.do
后面的参数就不用更改了
3、经过上述步骤,这个时候在
xxxx.do 的方法中 已经能获取到了code,有了code之后,我们可以根据微信获取OPENID的链接进行获取openId (
https://api.weixin.qq.com/sns/oauth2/access_tokenappid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code)
参数说明:appid :APPID
secret:APP Secret
code: 步骤2中获取到的code
然后在这个方法当中,得到OPENID之后,再重定向到我们自己写的A.html界面(让用户输入金额的界面),并且把openID传递给A.html界面
4、用户在A.html界面输入完金额,点击支付的按钮---- 这个时候请求接口xxxOrder.do (下单的接口)
5、服务器在xxxOrder.do的接口中。调用微信公众号支付的下单的API :https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
构造好参数,并且传Post提交,获取该接口的返回值
6、将微信下单API返回的参数,保存到数据库,并且将部分值 (APPID,timeStamp(时间戳) ,nonceStr(
随机字符串,不长于32位),package (
预支付交易会话标识),signType(MD5),paySign(MD5的签名,就是将这里所有的字段组合成字符串然后签名))。
7、A.html请求xxxOrder.do的接口,得到返回数据,调用下面代码,来发起支付:
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();
}
7、支付完成之后,会进入到5中调用微信下单API中,参数中设置的回调的URL参数。 改参数肯定也是我自己后台的xxxx.do的接口。在这个方法当中,参考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
可以得到我们需要的参数,根据 商户订单号----
out_trade_no 可以来更新数据库的表,并且推送给APP消息!