微信刷卡支付流程:

(1)顾客付款时,点微信钱包左上角的付款。

(2)付款界面有二维码、条码和一排18位的数字,这个数字是有时间限制的,每分钟刷新一次。

(3)商家POS机中录完商品及价格后,用扫码枪扫顾客手机中的条码或二维码,实际就是读取顾客的18位的数字串,读取到商家的系统中。

(4)商家系统将价格、产品名、顾客付款条码(18位,在微信中称为authCode),构造xml,提交到微信平台(商家需要开通自己的微信服务号和微信支付平台,或者使用第三方的平台代结算)。实际应用场景是,扫码完成后,商家系统自动提交支付请求,顾客微信扣款成功后,在顾客的手机中会显示支付成功。

下面是实现的代码,大致分两步,第一步是构造xml串,第二步是提交支付申请,支付申请如果提交成功,顾客微信会自动扣款(超过一定的额度要输入支付密码)。

<%@ 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.*"%>
<%
//被扫支付接口(刷卡支付接口)---个人出示微信钱包的付款,商家用扫码枪扫二维码或条码。
String authCode = request.getParameter("authCode");//通过扫码枪识别的用户微信支付条码(有时间限制,1分钟刷新一次)
IDBSupportService service = (IDBSupportService)ServiceLocator.getBean("IDBSupportService3");
WeixinServiceAccount accEnt = (WeixinServiceAccount)service.findSingleValueByHql("from WeixinServiceAccount where accountId='c0001-1'");
String appId = accEnt.getAppId();//微信服务号的appId
String mchId = accEnt.getPartnerId();//商户号
String deviceInfo ="ST0001";//商户自定义编号如门店号
String rand = StringUtil.getUUID();//随机码
String sign ="";//签名,需要计算
String body="刷卡支付测试";
String attach="订单额外描述";
String orderId = StringUtil.getUUID();//订单号
String totalFee = "1";//金额,分为单位
String ip = request.getHeader("X-Real-IP");//实际IP地址
String goodsTag="";
SortedMap<Object, Object> parameters = new TreeMap<Object, Object>(); //带排序功能的Map
parameters.put("appid", appId);//商户appid
parameters.put("mch_id", mchId);//商户ID
parameters.put("device_info", deviceInfo);//
parameters.put("nonce_str",rand);//随机字符串
parameters.put("body", body);//
parameters.put("attach", attach);
parameters.put("out_trade_no", orderId);//
parameters.put("total_fee", totalFee);
parameters.put("spbill_create_ip", ip);//
parameters.put("goods_tag", goodsTag);//
parameters.put("auth_code", authCode);//
sign = CommonUtil.createSign("UTF-8", accEnt.getAccountId(),parameters);//计算签名
parameters.put("sign", sign);
String xml = CommonUtil.getRequestXml(parameters);//转换为XML串
//调用刷卡支付接口扣款
String xml1 = RedBagUtil.httpsRequest("https://api.mch.weixin.qq.com/pay/micropay","POST",xml,accEnt.getAccountId(),accEnt.getPartnerId());
out.println(xml1);       
//返回的XML:
/*

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg><appid><![CDATA[wxce65957f84c7372b]]></appid><mch_id><![CDATA[1315931801]]></mch_id><device_info><![CDATA[ST0001]]></device_info><nonce_str><![CDATA[3c5d87f8e5dc401298478b397009847b]]></nonce_str><sign><![CDATA[50AEDF0A9D0896AB489D8CB8EA24B920]]></sign><result_code><![CDATA[SUCCESS]]></result_code><openid><![CDATA[o8LuytzDEI20nM9odOi-ko7-HT14]]></openid><is_subscribe><![CDATA[Y]]></is_subscribe><trade_type><![CDATA[MICROPAY]]></trade_type><bank_type><![CDATA[CFT]]></bank_type><total_fee>1</total_fee><fee_type><![CDATA[CNY]]></fee_type><transaction_id><![CDATA[4008372001201612062001726379]]></transaction_id><out_trade_no><![CDATA[80a41816f5f34c20885207c35dfe7bb1]]></out_trade_no><attach><![CDATA[订单额外描述]]></attach><time_end><![CDATA[20161206211713]]></time_end><cash_fee>1</cash_fee><cash_fee_type><![CDATA[CNY]]></cash_fee_type></xml>
*/
%>

可以看出,在OpenJweb平台中实现刷卡支付很简单。很多微信的调用已进行了封装。

作者微信openjweb Q Q 29803446



在OpenJweb平台中实现微信刷卡支付(被动扫码)相关推荐

  1. 在sdk中添加源文件_实用干货 | 一步一步教你在SpringBoot中集成微信刷卡支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

  2. 微信支付中的刷卡支付和扫码支付测试

    微信支付太坑了.官网下载的SDK,改了商户 ID和APPID等测试 都没用,仔细看了一下,原来首页默认调用的都是网上的页面,真是大坑 ..还有配置里的IP是8.8.8.8 ,用这个有时是会出错的,得改 ...

  3. 微信免密支付php代码实现,微信刷卡支付接入模式及免密流程

    根据商户具体的情况,刷卡支付接入模式可分为:商户后台接入和门店接入: 根据用户是否需要输入支付密码可分为:免密模式和验密模式. 1.接入模式-商户后台接入 该模式适合具备统一后台系统的商户.门店收银台 ...

  4. Android微信刷卡支付开发

    微信开发不容易,在于各个环节的理解和疏通. 支付类型分为几种,每种的业务也不相同,所以就困扰了很多人,我也抱怨过资料的混乱,没办法慢慢梳理. 摸索过后才知道我需要的是刷卡支付业务.公司的Android ...

  5. java微信刷卡支付demo_微信刷卡支付例子

    [实例简介] java微信支付样例~ 刷卡支付源码~自测可以使用,有需要的可以下来使用 [实例截图] [核心代码] wx-pay └── ScanPay └── ScanPay ├── WebCont ...

  6. php微信刷卡支付开发,【微信支付】刷卡支付开发者文档

    1.签名算法 签名生成的通用步骤如下: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=valu ...

  7. 微信支付python版2.0_刷卡支付-翟东平-专题视频课程

    微信支付python版2.0_刷卡支付-244人已学习 课程介绍         微信支付系列课程将讲解"刷卡支付"."扫码支付"."公众号支付&qu ...

  8. 微信支付java版v2.0_刷卡支付-翟东平-专题视频课程

    微信支付java版v2.0_刷卡支付-1814人已学习 课程介绍         微信支付系列课程将讲解"刷卡支付"."扫码支付"."公众号支付&qu ...

  9. 支付宝支付-刷卡支付(条码支付)

    此项目已开源欢迎Start.PR.发起Issues一起讨论交流共同进步 https://github.com/Javen205/IJPay http://git.oschina.net/javen20 ...

  10. php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南

    此文章入选<PHP领域内容榜>第4名 文章介绍 本文主要介绍通过thinkPHP5和第三方支付类包(WeChatDeveloper)实现快速接入微信扫码支付和微信H5手机网站支付(非微信浏 ...

最新文章

  1. php传递JSON数据
  2. GAN 模型生成山水画,骗过半数观察者,普林斯顿大学本科生出品
  3. The FLARE On Challenge
  4. springMVC-配置Bean
  5. Java 打飞机(小游戏)[版权非本人 本人制作收藏整理]
  6. IPHONE 开发 7 -- Object C 02 字符串NSString 与 char* ,字符串的遍历,字符串的比较,截取与大小写改变,搜索字符串与替换字符串...
  7. ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法...
  8. python request对四类参数的处理_如何处理Djang中同一参数具有多个变量的request.GET...
  9. 06Struts2国际化实现
  10. CV算法助理 | 华为外包招聘
  11. SharePoint:扩展DVWP - 第15部分:通过网站栏实现可维护的下拉框
  12. 第二:Pytest执行用例规则和Pycharm运行的三种姿态
  13. 身份证号校验、身份证照片解析(百度API)
  14. MATLAB线条颜色
  15. linux 移动硬盘 mac,Mac下使用NTFS格式的移动硬盘
  16. 如何把视频转换为gif动图
  17. html5制作线路图,HTML5画一个简单呢好看的电路图
  18. php sql多字段求和,JSP_sql实现多字段求和并查询,下面就sql多字段求和并作为sql - phpStudy...
  19. SQL Server2012 提示不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法
  20. D3.js树图tree 组织机构分布图(基于vue)

热门文章

  1. 一文带你入门 HTTP 协议
  2. MY-IKuai-1
  3. 计算机打印后台处理程序在哪里,Win7系统连接打印机出现本地打印后台处理程序服务没有运行怎么办...
  4. 配置Apache Digest认证
  5. 词霸天下---177 词根 【 -vast- = -wast- 空,荒废 】仅供学习使用
  6. 智慧工厂之化工厂人员定位中的智能访客管理系统-新导智能
  7. VsCode+PHP开发 推荐插件
  8. 数学建模竞赛网站汇总
  9. Linux系统/usr/local/src /usr/local是什么目录
  10. 16.Linux环境搭建虚拟网络