1. 程式人生 > >在OpenJWeb平臺中實現主動掃碼(商家主動出示支付二維碼)

在OpenJWeb平臺中實現主動掃碼(商家主動出示支付二維碼)

上一篇介紹了被動掃碼的實現,本文介紹如何在OpenJWeb平臺中實現主動掃碼(商家生成支付二維碼),出示給使用者,使用者掃碼後通過微信付款。

業務流程:

(1)商家在POS機中錄好了商品和價格,然後呼叫微信的預下單介面(商家需要有自己的微信服務號和微信支付平臺,或者使用第三方平臺的微信服務號代收款)。

(2)預下單介面中,交易型別需要選擇NATIVE,這樣才能返回二維碼連結引數code_url。

(3)系統根據code_url的值,生成二維碼圖片,這個圖片展示給顧客,讓顧客掃碼支付。

(4)顧客掃碼成功後,系統進行支付後的處理。

下面是主動掃碼的實現程式碼:

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="com.openjweb.weixin.entity.*"%>
<%@ page import="com.openjweb.weixin.util.*"%>
<%@ page import="org.openjweb.core.service.*"%>
<%@ page import="org.openjweb.core.util.*"%>
<%@ page import="com.openjweb.erp.barcode.*"%>

<%
//顧客掃商家的二維碼
String orderId = "SC20161207000007"; //訂單號
String accountId ="c0001-1"; //這個是openjweb中根據此服務號程式碼查詢對應的微信服務號的appId,mchId等資訊
String loginId = "1459321703053002024";//登入賬號,根據登入賬號查詢對應的微信OpenID
String xml =CommonUtil. createPostData(request,loginId,orderId ,accountId,"NATIVE");//構造xml串

//獲取codeUrl(返回的xml中有code_url的值):

/*
<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg><appid><![CDATA[wxce65957f84c7372b]]></appid><mch_id><![CDATA[1315931801]]></mch_id><nonce_str><![CDATA[9gHyz2VItFzr5Y66]]></nonce_str><sign><![CDATA[0D63B28EE3EC6CC92855C267170A669A]]></sign><result_code><![CDATA[SUCCESS]]></result_code><prepay_id><![CDATA[wx20161207073003942f6cf2960533727688]]></prepay_id><trade_type><![CDATA[NATIVE]]></trade_type><code_url><![CDATA[weixin://wxpay/bizpayurl?pr=NJRm3sd]]></code_url></xml>
*/

//從返回的xml中解析出code_url

Map<String,String>  map = MessageUtil.pasrseXmlString(xml1);
String codeUrl = (String)map.get("code_url");
out.println(codeUrl);
//將codeUrl轉換為二維碼圖片,並儲存到web應用的images目錄,命名為tmp123.png

 
org.openjweb.core.util.QRCodeUtil.encode(codeUrl, request.getRealPath("/images/"),200,200,200,"tmp123.png");
  
  

%>
<html>
<head>
</head>
<body>
<img src="<%=imgPath%>">
</body>
</html>

<%=imgPath%>中在頁面中將這個二維碼圖片展示出來,在POS系統中,需要將這個二維碼展示給顧客掃碼。

作者微訊號openjweb Q-Q:29803446