1. 程式人生 > >微信支付之-掃碼支付-模式2(模式1)

微信支付之-掃碼支付-模式2(模式1)


微信商戶申請開通:https://pay.weixin.qq.com/service_provider/index.shtml
注意:開通公眾賬號之後,然後根據流程開通相對應的商戶平臺 開發文件之場景介紹文件:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1
開發文件之模式1的流程圖:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4
開發文件之模式2的流程圖:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 開發之前所需要的引數:
1、APP ID ,應用ID(在公眾平臺--基本配置模組中) 2、APP Sercret ,應用祕鑰(在公眾平臺--基本配置模組中) 3、API Key,API的祕鑰(在商戶平臺--API安全中設定) 4、mchID , 商戶號(在公眾平臺---微信支付---商戶資訊) 5、order_api , 統一下單API的介面

6、notify_url    交易成功回撥的介面的URL

開發模式1的配置:


模式1開發流程: 1、生成二維碼(https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4),給買家掃碼 2、回撥到上圖設定的回撥的URL當中,得到必要的引數,呼叫統一下單API,生成引數,提交到微信介面,並把這些引數儲存到資料庫(最重要的是商戶訂單號,此訂單號再微信支付成功非同步回撥中,會返回這個訂單號,也就是說,訂單號是此條資料的唯一標識
) 3、步驟2中統一下單會返回一個code_url(二維碼連線),生成二維碼,給買家掃碼 4、買家開啟微信掃碼,支付完成。 5、微信進入回撥的url (該回調的URL在下單的API的引數中) 6、在回撥的介面中獲取微信傳過來的引數。根據商戶訂單號--修改資料庫的資料。 推送到APP成功的狀態 模式2開發流程: 1、呼叫統一下單API,生成引數,提交到微信介面,並把這些引數儲存到資料庫(最重要的是商戶訂單號,此訂單號再微信支付成功非同步回撥中,會返回這個訂單號,也就是說,訂單號是此條資料的唯一標識) 2、步驟2中統一下單會返回一個code_url(二維碼連線),生成二維碼,給買家掃碼
3、買家開啟微信掃碼,支付完成。 4、微信進入回撥的url (該回調的URL在下單的API的引數中) 5、在回撥的介面中獲取微信傳過來的引數。根據商戶訂單號--修改資料庫的資料。 推送到APP成功的狀態
結論:模式1與模式2相比,模式1更為繁瑣和複雜,市場上用的基本都是模式2 模式2的程式碼: 1、組成下單API的資料,傳送給微信,獲取返回值
    //微信掃碼模式2
    public void wxPayModel2() {
        String body = "測試商戶的名稱";
        int money = 100;//交易金額,以分為單位100=1元。
        String productId= WeiXinUtil.getTimeStamp();//獲取商品訂單號
        String outTradeNo=WeiXinUtil.getOrderNo();//獲取該筆交易的訂單號
        String ip=WeiXinUtil.getIp();//獲取發起請求的IP,我這裡就直接獲取了本機的IP了,實際開發需要獲取實際的請求IP
        ScanPayReqData data  = new ScanPayReqData(body,money,productId,outTradeNo,ip);//組成要傳送給微信的資料為一個實體類
        String reuslt= HttpUtil.sendPost(Configure.orderApi,data);//將組裝好的資料傳送到微信,並獲取微信的返回值

        //接下來的操作就是解析result。 將xml格式的result解析成json或者實體類。然後將資料儲存到資料庫...一下步驟省略...在改xml中有一個引數code_url,這個就是二維碼的連結,
        //將該二維碼的連結生成圖形二維碼,給使用者掃碼。會進入到Configure.notifyUrl的回撥介面當中。現在假設回撥的為下面的方法notifyUrl();

    }
接下來的操作就是解析result。 將xml格式的result解析成json或者實體類。然後將資料儲存到資料庫...一下步驟省略...在改xml中有一個引數code_url,這個就是二維碼的連結,
將該二維碼的連結生成圖形二維碼,給使用者掃碼。會進入到Configure.notifyUrl的回撥介面當中。現在假設回撥的為下面的方法notifyUrl(); 2、notifyUrl()方法中需要操作的動作----注意:只有在微信支付成功,微信才會回撥該方法      參考:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_2
    //微信支付成功之後的回撥,注意,只有在成功支付,微信才會進入回撥,注意
    public void notiyUrl(HttpServletRequest req,HttpServletResponse response){
        ServletInputStream input =  req.getInputStream();//這裡得到輸入流,這就是微信在回撥該介面的時候,會把引數傳到這裡,下一步就是將流解析成xml。然後再將xml解析成我們需要的格式
        //得到資料之後,通過outTradeNo來修改wxPayModel2()中已經插入資料庫中的資料
        //然後傳送推送給APP。說交易成功。
    }


github下載地址:
https://github.com/townkoim/WXPay 說明:改程式碼僅供參考,不能執行。程式碼在WXPay/app/src/main/java/com//lb//pay/wxpay/目錄下