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

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

微信掃碼支付使用入門(mén)

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

第一章 微信掃碼支付介紹

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

第二章 微信支付必要條件

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

微信支付使用入門(mén)

第三章 微信支付流程介紹

微信支付模式介紹

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

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

在這里,我無(wú)法登陸后臺(tái),所以選擇使用模式二。

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

微信支付

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

收款方的配置文件

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

//訂單號(hào),訂單號(hào)必須唯一。自己測(cè)試請(qǐng)切換其他訂單號(hào)

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

//設(shè)備號(hào),無(wú)關(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)可訪(fǎng)問(wèn)的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é)果是一個(gè)map集合,map集合的詳細(xì)參數(shù)介紹同樣點(diǎn)擊【統(tǒng)一下單API】,重點(diǎn)是,獲取map集合中的key為code_url的值,這個(gè)就是微信支付的地址。

微信掃碼支付入門(mén)

第六章 二維碼生成介紹

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

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


第七章 查詢(xún)訂單API代碼說(shuō)明

詳細(xì)參數(shù)請(qǐng)參考【查詢(xún)訂單API】

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

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

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config);

//設(shè)置需要查詢(xún)的訂單的單號(hào)

Map data = new HashMap();

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

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

try {

Map resp = wxpay.orderQuery(data);

/*

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

SUCCESS—支付成功

REFUND—轉(zhuǎn)入退款

NOTPAY—未支付

CLOSED—已關(guān)閉

REVOKED—已撤銷(xiāo)(刷卡支付)

USERPAYING--用戶(hù)支付中

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

}

}

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

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

微信掃碼支付入門(mén)

第八章:總結(jié)

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

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

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

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

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



0 分享到:
和我們?cè)诰€(xiàn)交談!