教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

微信掃碼支付使用入門

更新時間:2018年12月07日14時14分 來源:傳智播客 瀏覽次數(shù):

第一章 微信掃碼支付介紹

? 微信掃碼支付就是我們目前生活中最常使用的移動端支付方式之一。

第二章 微信支付必要條件

? 我們要完成微信支付,那么我們客戶自己是付款方,那么收款方呢?所以在這里我們需要一個收款方。那么要能夠成為微信掃碼支付的收款方,我們需要去申請微信的服務(wù)號,然后去開通掃碼支付。(這個服務(wù)號個人無法申請,在這里不做教程說明)

微信支付使用入門

第三章 微信支付流程介紹

微信支付模式介紹

模式一:商戶必須在公眾平臺后臺設(shè)置支付回調(diào)URL。

模式二:調(diào)用微信的接口,獲取支付的地址。

在這里,我無法登陸后臺,所以選擇使用模式二。

模式二開發(fā)流程介紹

微信支付

根據(jù)上述的時序圖,得到如下的流程:注意上圖中紅色部分就是我們開發(fā)者需要做的部分

(1)商戶后臺系統(tǒng)根據(jù)用戶選購的商品生成訂單。

(2)用戶確認(rèn)支付后調(diào)用微信支付【統(tǒng)一下單API】生成預(yù)支付交易.

(3)微信支付收到請求后生成預(yù)支付交易單,并返回交易會話的二維碼鏈接code_url

(4)商戶后臺系統(tǒng)根據(jù)返回的code_url生成二維碼。

(5)用戶打開微信“掃一掃”掃描二維碼,微信客戶端將掃碼內(nèi)容發(fā)送到微信支付系統(tǒng)。

(6)微信支付系統(tǒng)收到客戶端請求,驗(yàn)證鏈接有效性后發(fā)起用戶支付,要求用戶授權(quán)。

(7)用戶在微信客戶端輸入密碼,確認(rèn)支付后,微信客戶端提交授權(quán)。

(8)微信支付系統(tǒng)根據(jù)用戶授權(quán)完成支付交易。

(9)微信支付系統(tǒng)完成支付交易后給微信客戶端返回交易結(jié)果,并將交易結(jié)果通過短信、微信消息提示用戶。微信客戶端展示支付交易結(jié)果頁面。

(10)微信支付系統(tǒng)通過發(fā)送異步消息通知商戶后臺系統(tǒng)支付結(jié)果。商戶后臺系統(tǒng)需回復(fù)接收情況,通知微信后臺系統(tǒng)不再發(fā)送該單的支付通知。

(11)未收到支付通知的情況,商戶后臺系統(tǒng)調(diào)用【查詢訂單API】。

(12)商戶確認(rèn)訂單已支付后給用戶發(fā)貨。

第四章 核心流程所涉及的功能代碼

1.調(diào)用微信的【統(tǒng)一下單API】,會的到微信支付的地址code_url

2.根據(jù)code_url生成二維碼

3.調(diào)用【查詢訂單API】,查詢微信支付的結(jié)果。

第五章 統(tǒng)一下單api代碼說明

首先需要下載微信支付的jar包【SDK與DEMO下載】

其中,企業(yè)公眾號id、api秘鑰、商戶賬號需要申請服務(wù)號才能擁有,可以查看第二章,這里公司隱私,不能透露

收款方的配置文件

public class MyConfig implements WXPayConfig {   //獲取 App ID(企業(yè)方公眾號Id)
   @Override
   public String getAppID() {       return "*****************";   }    //獲取 API 密鑰
   @Override
   public String getKey() {       return "*****************";   }   //獲取 Mch ID(商戶賬號)
   @Override
   public String getMchID() {       return "****************";   } ?   //獲取商戶證書內(nèi)容(我們這里不需要證書)
   @Override
   public InputStream getCertStream() {       // TODO Auto-generated method stub
       return null;   } ?   //HTTP(S) 連接超時時間,單位毫秒
   @Override
   public int getHttpConnectTimeoutMs() {       // TODO Auto-generated method stub
       return 8000;   } ?   //HTTP(S) 讀數(shù)據(jù)超時時間,單位毫秒
   @Override
   public int getHttpReadTimeoutMs() {       return 10000;   } }

統(tǒng)一下單DEMO

詳細(xì)參數(shù)點(diǎn)擊【統(tǒng)一下單API】

public class WXPayUtils {

public static void main(String[] args) throws Exception {

MyConfig config = new MyConfig();

//加載微信支付的企業(yè)參數(shù)

WXPay wxpay = new WXPay(config);

//設(shè)置微信支付的參數(shù)

Map data = new HashMap();

//商品的描述

data.put("body", "estore商城");

//訂單號,訂單號必須唯一。自己測試請切換其他訂單號

data.put("out_trade_no", "20160909105sss00000012");

//設(shè)備號,無關(guān)

data.put("device_info", "");

//幣種 人民幣

data.put("fee_type", "CNY");

//支付金額

data.put("total_fee", "50");

data.put("spbill_create_ip", "123.12.12.123");

//異步接收微信支付結(jié)果通知的回調(diào)地址,通知url必須為外網(wǎng)可訪問的url,不能攜帶參數(shù)。我們不適用異步通知,但是這里的參數(shù)必須要有

data.put("notify_url", "http://www.example.com/wxpay/notify");

data.put("trade_type", "NATIVE"); // 此處指定為掃碼支付

data.put("product_id", "12");

?

try {

Map resp = wxpay.unifiedOrder(data);

for(Map.Entry entry:resp.entrySet()){

String key = entry.getKey();

String value = entry.getValue();

System.out.println(key+":"+value);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

輸出結(jié)果

輸出結(jié)果是一個map集合,map集合的詳細(xì)參數(shù)介紹同樣點(diǎn)擊【統(tǒng)一下單API】,重點(diǎn)是,獲取map集合中的key為code_url的值,這個就是微信支付的地址。

微信掃碼支付入門

第六章 二維碼生成介紹

我們通常掃描二維碼,其實(shí)可以發(fā)現(xiàn)訪問了一個地址。說白了,二維碼的本質(zhì)就是一個網(wǎng)絡(luò)資源的地址。二維碼的生成是通過js插件生成的。
【qrcode.js下載】
 <!DOCTYPE html>
 <html>
 <head>
     <meta charset="utf-8" />
     <title></title>
 </head>
 <body>
   <!--
     定義一個div,用于生成二維碼      
   -->
         <div id="qrcode"></div>
 </body>
 <script src="js/qrcode.js"></script>
 <script>
     //獲取div標(biāo)簽對象
     var qrcodeDiv = document.getElementById("qrcode");     //第一個參數(shù):二維碼圖片存放的標(biāo)簽對象        第二個參數(shù):就是掃描二維碼,訪問的地址。
     new QRCode(qrcodeDiv,"http://www.baidu.com"); </script>
 </html>
結(jié)果如圖:

切換參數(shù)中的百度的地址為我們第五章中生成的支付地址weixin://wxpay/bizpayurl?pr=XmGVcaw


第七章 查詢訂單API代碼說明

詳細(xì)參數(shù)請參考【查詢訂單API】

public static void main(String[] args) throws Exception {

//加載企業(yè)參數(shù)

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

//設(shè)置需要查詢的訂單的單號

Map data = new HashMap();

data.put("out_trade_no", "20160909105s6s00000012");

//輸出查詢的結(jié)果

try {

Map resp = wxpay.orderQuery(data);

/*

trade_state代表的就是訂單支付結(jié)果

SUCCESS—支付成功

REFUND—轉(zhuǎn)入退款

NOTPAY—未支付

CLOSED—已關(guān)閉

REVOKED—已撤銷(刷卡支付)

USERPAYING--用戶支付中

PAYERROR--支付失敗(其他原因,如銀行返回失敗)

*/

for(Map.Entry entry:resp.entrySet()){

String key = entry.getKey();

String value = entry.getValue();

System.out.println(key+":"+value);

}

} catch (Exception e) {

e.printStackTrace();

}

}

返回值同樣是一個map集合,其中trade_state的key所對應(yīng)的值就是訂單的交易狀態(tài)。

參數(shù)結(jié)果:

微信掃碼支付入門

第八章:總結(jié)

1.必須申請公眾號,獲取微信支付的參數(shù)。

2.在MyConfig中設(shè)置微信支付的參數(shù)

3.調(diào)用微信支付的下單的api,填寫指定參數(shù),獲取支付的url地址

4.調(diào)用現(xiàn)有的js,給定指定的url地址參數(shù),生成掃碼支付的二維碼地址

5.后臺輪詢查詢訂單的支付狀態(tài)



0 分享到:
和我們在線交談!