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

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

微信掃碼支付使用入門

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

第一章 微信掃碼支付介紹

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

第二章 微信支付必要條件

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

微信支付使用入門

第三章 微信支付流程介紹

微信支付模式介紹

模式一:商戶必須在公眾平臺后臺設置支付回調URL。

模式二:調用微信的接口,獲取支付的地址。

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

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

微信支付

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

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

(2)用戶確認支付后調用微信支付【統(tǒng)一下單API】生成預支付交易.

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

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

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

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

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

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

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

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

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

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

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

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

2.根據code_url生成二維碼

3.調用【查詢訂單API】,查詢微信支付的結果。

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

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

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

收款方的配置文件

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 "****************";   } ?   //獲取商戶證書內容(我們這里不需要證書)
   @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) 讀數據超時時間,單位毫秒
   @Override
   public int getHttpReadTimeoutMs() {       return 10000;   } }

統(tǒng)一下單DEMO

詳細參數點擊【統(tǒng)一下單API】

public class WXPayUtils {

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

MyConfig config = new MyConfig();

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

WXPay wxpay = new WXPay(config);

//設置微信支付的參數

Map data = new HashMap();

//商品的描述

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

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

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

//設備號,無關

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

//幣種 人民幣

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

//支付金額

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

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

//異步接收微信支付結果通知的回調地址,通知url必須為外網可訪問的url,不能攜帶參數。我們不適用異步通知,但是這里的參數必須要有

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();

}

}

}

輸出結果

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

微信掃碼支付入門

第六章 二維碼生成介紹

我們通常掃描二維碼,其實可以發(fā)現(xiàn)訪問了一個地址。說白了,二維碼的本質就是一個網絡資源的地址。二維碼的生成是通過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標簽對象
     var qrcodeDiv = document.getElementById("qrcode");     //第一個參數:二維碼圖片存放的標簽對象        第二個參數:就是掃描二維碼,訪問的地址。
     new QRCode(qrcodeDiv,"http://www.baidu.com"); </script>
 </html>
結果如圖:

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


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

詳細參數請參考【查詢訂單API】

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

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

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

//設置需要查詢的訂單的單號

Map data = new HashMap();

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

//輸出查詢的結果

try {

Map resp = wxpay.orderQuery(data);

/*

trade_state代表的就是訂單支付結果

SUCCESS—支付成功

REFUND—轉入退款

NOTPAY—未支付

CLOSED—已關閉

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所對應的值就是訂單的交易狀態(tài)。

參數結果:

微信掃碼支付入門

第八章:總結

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

2.在MyConfig中設置微信支付的參數

3.調用微信支付的下單的api,填寫指定參數,獲取支付的url地址

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

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



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