天天看點

微信支付之公衆号支付

微信商戶申請開通:https://pay.weixin.qq.com/service_provider/index.shtml 注意:開通公衆賬号之後,然後根據流程開通相對應的商戶平台

開發文檔之場景介紹文檔:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3

開發文檔之模式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的接口,得到傳回資料,調用下面代碼,來發起支付:    參考:   https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

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消息!

繼續閱讀