最近要做網頁微信公衆號網頁調微信支付。好了,廢話不多說,先看官方的文檔:
https://pay.weixin.qq.com/index.php/home/login?return_url=%2F
1、打開公衆號支付:
2、查看第二階段的開發文檔
進入到 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1
3、先查看業務流程
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4
4、重點如下圖紅框標識
5、重點在第4和第5步;圖中有提到調用【統一下單API()】來生成預付訂單()也就是先要生成prepay_id。
廢話不多說,先看接口文檔中的統一下單API:統一下單API
6、在該接口中有提到【“除被掃支付場景以外,商戶系統先調用該接口在微信支付服務後臺生成預支付交易單,返回正確的預支付交易回話標識後再按掃碼、JSAPI、APP等不同場景生成交易串調起支付。”】。OK,其它的先不管;先根據接口API,編寫代碼:
/**
* 構建微信統一支付請求xml串
* @param payParams
* @return str
*/
public static String buildUnifiedOrderReq(Map<String,String> payParams){
String payStr = "";
payStr += "<xml>";
payStr += "<appid>"+payParams.get("appid")+"</appid>";
payStr += "<body>"+payParams.get("body")+"</body>";
payStr += "<mch_id>"+payParams.get("mch_id")+"</mch_id>";
payStr += "<nonce_str>"+payParams.get("nonce_str")+"</nonce_str>";
payStr += "<notify_url>"+payParams.get("notify_url")+"</notify_url>";
payStr += "<openid>"+payParams.get("openid")+"</openid>";
payStr += "<out_trade_no>"+payParams.get("out_trade_no")+"</out_trade_no>";
payStr += "<spbill_create_ip>"+payParams.get("spbill_create_ip")+"</spbill_create_ip>";
payStr += "<total_fee>"+payParams.get("total_fee")+"</total_fee>";
payStr += "<trade_type>JSAPI</trade_type>";
payStr += "<sign>"+payParams.get("sign")+"</sign>";
payStr +="</xml>";
return payStr;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
7、在編寫代碼的過程中,你會發現在調用統一下單接口前,需要獲取支付用戶的openid。在接口中有獲取openid的相關鏈接。因我是公衆號,故來到此頁面:公衆號獲取openid
8、因是網頁獲取,故點此鏈接進入獲取用戶openid的api,如下圖
9、點擊鏈接,來到了微信公衆號網頁授權獲取用戶基本信息;初步一看,一堆堆的說明,怎麼搞啊,頭大了。不用擔心,一步一句看下去,到最後,你會發現獲取openid有兩種不同的方式:
- 靜默授權(用戶無感知)
- 感知授權(需用戶授權)
10、爲了提升用戶體驗,初步決定使用靜默授權方式。
11、瀏覽完該api說明,可以得到靜默授權方式獲取到微信用戶的openid獲取步驟。
- 1).引導用戶訪問鏈接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
- 2).通過code換取access_token和openid
- (上述鏈接的參數說明,可以參考接微信的接口文檔)
12、那麼問題又來了,如何測試-請看下篇~