在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串

//调用预下单接口
String xml1 = CommonUtil. httpsRequest("https://api.mch.weixin.qq.com/pay/unifiedorder", "POST", xml,  orderId);

//获取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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值