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

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

在官方的产品是叫做当面付

1、什么是当面付呢?

简单的讲就是条码支付(刷卡支付)、扫码支付、声波支付。

【官方是这样解释的】
商户可通过以下任一方式在线下完成交易收款都是当面付
1、商家通过扫描线下买家支付宝钱包中的条码、二维码等方式将买家的交易资金直接打入卖家支付宝账户,资金实时到账;
2、线下买家通过使用支付宝钱包扫描商家的二维码等方式完成支付,提升商家收银效率,资金实时到账;
3、线下买家使用支付宝钱包中的当面付功能,通过声波支付的方式向商家完成付款,资金实时到账。

2、申请条件

  1. 申请前必须拥有企业或个人支付宝账号,且通过支付宝实名认证审核;
  1. 营业执照主体需与签约主体一致,如不一致者需提供有效授权函;授权函要求:公司类型必须盖公章、个体工商户需两选一: a. 法人身份证原件+法人签字 b. 法人身份证原件+个体工商户盖章;
  2. 部分行业暂未开放签约,如保险、黄金期货、借贷(P2P)、POS等支付业务等;

3、产品费率

单笔费率 0.6%

4、签约认证流程

如果你只是想了解支付流程可以不进行签约,我们可以使用沙箱环境进行测试。

签约认证流程

开发平台-研发服务-沙箱环境

5、聊聊条码支付(刷卡支付)

官方文档 当面付详细的产品介绍在这里

条码支付是支付宝给到线下传统行业的一种收款方式。商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款。用户仅需出示付款码,所有收款操作由商家端完成。

业务流程

使用步骤:

1、用户登录支付宝钱包,点击首页“付款”,进入付款码界面;
2、收银员在商家收银系统操作生成订单,用户确认支付金额;
3、用户出示钱包的“付款码”,收银员用扫码设备来扫描用户手机上的条码/二维码后,商家收银系统提交支付;
4、付款成功后商家收银系统会拿到支付成功或者失败的结果。

使用步骤

6、如何接入条码支付(刷卡支付)呢?

官方接入介绍资料 当面付快速接入

前三步任何支付方式对接必不可少,这些按照文档操作应该没有问题。如遇到问题欢迎留言

前三步任何支付方式对接必不可少

今天的主角要登场了>>>>>>条码支付

调用时序图

这里主要涉及到三个接口

  • 交易支付接口alipay.trade.pay

  • 交易查询接口alipay.trade.query

  • 交易撤销接口alipay.trade.cancel

这里我们使用官方提供的服务端SDK(开放平台服务端SDK)来快速接入

7、选择正确的接入环境

?上面提到过如果是测试或者不上线应用可以不用签约直接使用沙箱环境

正式环境支付网关:https://openapi.alipay.com/gateway.do
沙盒环境支付网关:https://openapi.alipaydev.com/gateway.do

8、使用SDK封装接口

添加支付宝相关的配置文件 alipay.properties

############################
# 支付宝相关的配置
############################appId=xxx //测试号的APPID
privateKey=xxx //测试号的私钥 建议使用RSA2
alipayPulicKey=xxx //支付宝公钥
serverUrl=https://openapi.alipaydev.com/gateway.do //支付网关
notify_domain = xxx //通知域名
8.1 在SDK调用前需要进行初始化
    private static final Prop prop = PropKit.use("alipay.properties");public static AlipayClient alipayClient;public static String charset = "UTF-8";public static String privateKey = prop.get("privateKey");public static String alipayPulicKey = prop.get("alipayPulicKey");public static String serverUrl = prop.get("serverUrl");public static String appId = prop.get("appId");public static String format = "json";public static String signType = "RSA2";public static String notify_domain = prop.get("notify_domain");static {alipayClient = new DefaultAlipayClient(serverUrl, appId, privateKey, format, charset, alipayPulicKey, signType);}
8.2 封装交易支付接口alipay.trade.pay
/*** 条形码支付* https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Yhpibd&treeId=194&articleId=105170&docType=1#s4* @throws AlipayApiException*/public static String tradePay(AlipayTradePayModel model) throws AlipayApiException {AlipayTradePayResponse response = tradePayToResponse(model);return response.getBody();}public static AlipayTradePayResponse tradePayToResponse(AlipayTradePayModel model) throws AlipayApiException{AlipayTradePayRequest request = new AlipayTradePayRequest();request.setBizModel(model);// 填充业务参数return alipayClient.execute(request); // 通过alipayClient调用API,获得对应的response类}
8.3 交易查询接口alipay.trade.query
/*** 交易查询接口* https://doc.open.alipay.com/docs/api.htm?spm=a219a.7395905.0.0.8H2JzG&docType=4&apiId=757* @param bizContent* @return* @throws AlipayApiException*/public static boolean isTradeQuery(AlipayTradeQueryModel model) throws AlipayApiException{AlipayTradeQueryResponse response = tradeQuery(model);if(response.isSuccess()){return true;}return false;}public static AlipayTradeQueryResponse  tradeQuery(AlipayTradeQueryModel model) throws AlipayApiException{AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();request.setBizModel(model);return alipayClient.execute(request);}
8.4 交易撤销接口alipay.trade.cancel
/*** 交易撤销接口* https://doc.open.alipay.com/docs/api.htm?spm=a219a.7395905.0.0.XInh6e&docType=4&apiId=866* @param bizContent* @return* @throws AlipayApiException*/public static boolean isTradeCancel(AlipayTradeCancelModel model) throws AlipayApiException{AlipayTradeCancelResponse response = tradeCancel(model);if(response.isSuccess()){return true;}return false;}public static AlipayTradeCancelResponse tradeCancel(AlipayTradeCancelModel model) throws AlipayApiException{AlipayTradeCancelRequest request = new AlipayTradeCancelRequest();request.setBizModel(model);AlipayTradeCancelResponse response = alipayClient.execute(request);return response;}

9、使用沙盒环境测试

下载沙箱模式下的app【沙箱钱包

9.1 交易支付接口alipay.trade.pay测试

/*** 条码支付* https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Yhpibd&treeId=194&articleId=105170&docType=1#s4*/public void tradePay() {String authCode = getPara("auth_code");String subject = "Javen 支付宝条形码支付测试";String totalAmount = "100";AlipayTradePayModel model = new AlipayTradePayModel();model.setAuthCode(authCode);model.setSubject(subject);model.setTotalAmount(totalAmount);model.setOutTradeNo(StringUtils.getOutTradeNo());model.setScene("bar_code");try {String resultStr = AliPayApi.tradePay(model);renderText(resultStr);} catch (Exception e) {e.printStackTrace();}}

打开沙箱钱包>付款>输入条形码测试

返回的结果

{"alipay_trade_pay_response": {"code": "10000","msg": "Success","buyer_logon_id": "abp***@sandbox.com","buyer_pay_amount": "100.00","buyer_user_id": "2088102169474200","fund_bill_list": [{"amount": "100.00","fund_channel": "ALIPAYACCOUNT"}],"gmt_payment": "2017-05-07 20:28:35","invoice_amount": "100.00","open_id": "20881035070193409461376162014620","out_trade_no": "050720283214941","point_amount": "0.00","receipt_amount": "100.00","total_amount": "100.00","trade_no": "2017050721001004200200238428"},"sign": "FZVBkb4tuqjM/3OZnAJJ8YFkGSmpcMIum+WdhCNURy+jSs5mZT2RZLlDuzVNHYoZQpItpVscDR86n87wFni/lhaNK0UvCkjQmSeBrmzuntFDrD8rh/KX3U3kpsQEmSzbI/E1VNYM3zL/lVPCnjkc9etVky8w690yHVqsRTBpjXDYUw91zdlm7iXjrRAv1vNWEhfaAgBh3toz8Asra03vFPMXaaGp4ARTI3AkjatH4zPO0JmDu3fMd+jk759FYW1qGf89LpLD/6ng+VNhu4rr3FC4RpLtYed9lKSrehlujGHSkhnWJcr0JZ6doYYF4aJuH7Eflyt+FCg/1JFzd0Mygw=="
}
9.2 交易查询接口alipay.trade.query测试
public void tradeQuery(){try {AlipayTradeQueryModel model = new AlipayTradeQueryModel();model.setOutTradeNo("050720283214941");model.setTradeNo("2017050721001004200200238428");boolean isSuccess = AliPayApi.isTradeQuery(model);renderJson(isSuccess);} catch (AlipayApiException e) {e.printStackTrace();}}

或者

public void tradeQueryByStr(){String out_trade_no = getPara("out_trade_no");AlipayTradeQueryModel model = new AlipayTradeQueryModel();model.setOutTradeNo(out_trade_no);try {String resultStr = AliPayApi.tradeQuery(model).getBody();renderText(resultStr);;} catch (AlipayApiException e) {e.printStackTrace();}}

返回的结果

{"alipay_trade_query_response": {"code": "10000","msg": "Success","buyer_logon_id": "abp***@sandbox.com","buyer_pay_amount": "100.00","buyer_user_id": "2088102169474200","fund_bill_list": [{"amount": "100.00","fund_channel": "ALIPAYACCOUNT"}],"invoice_amount": "100.00","open_id": "20881035070193409461376162014620","out_trade_no": "050720283214941","point_amount": "0.00","receipt_amount": "100.00","send_pay_date": "2017-05-07 20:28:34","total_amount": "100.00","trade_no": "2017050721001004200200238428","trade_status": "TRADE_SUCCESS"},"sign": "DE6qYfU0Nziv3Dxpaj0gUROcqMNmREwYUw/t9qlnLiuM1JkKEdNJtbyJZ8OCoOIkgXEOSs7+mOrGgyxmOQqccwwhkDDsYXhPnc0cy4M7L4sNl5S3nUaveBaZjk3SMMGif43UaYtVI6SF4kq74uyoH15tCWDJ0N3nYct2epgc7r6kprAFqQxszgYp4tfKLw0qPCKnUyo7+WRbrc6UWQVuK+xDlVcvivW5cXjAf/HFyb8o+ddj6g+QQ4jUN2WTc2QGpbtfum6G7oPHT99cjAURVRw2NmU5WfUXNazzSvisa2oYsl8EH7+XHvsAMyIUZw0Ix8ymuAXdMkrUPFY4PfzjIg=="
}
9.3 交易撤销接口alipay.trade.cancel测试
public void tradeCancelByStr(){try {AlipayTradeCancelModel model = new AlipayTradeCancelModel();model.setOutTradeNo("050720283214941");model.setTradeNo("2017050721001004200200238428");AlipayTradeCancelResponse response = AliPayApi.tradeCancel(model);renderJson(response.getBody());} catch (AlipayApiException e) {e.printStackTrace();}}
{"alipay_trade_cancel_response": {"code": "10000","msg": "Success","out_trade_no": "050720283214941","retry_flag": "N"},"sign": "QFwTwACi/x/qZu7YCapToWKpYDatg7Y06KAxij01PHSQrq0+l9eeFGdNIRpD2rSmkCVN75RQManw4PvIEurN5uW6YSZlZQ0Rj2EeH0eVyNWqNRWmVGeSaLQ+hpAt3vG/cy5vXJ1Zl7yr/VbtRiuSYrbzPhgkG1UNYf9JIb4Nj2iSpo8Ct6Bbhiq848w7ZEN6itBmd04N3O4HkBoueuXtgUmKoaTegDfrtNtQ7dRAkCRnoa43QbHYysqwOO751JjI6HOeviZUrTspegUFbqhSXInaZ4LMqeiPWXeXc7dRmtOlPOSRY5wYzYYNCmEe89HdyLFSzd447QS2b5Ky3wAY3w=="
}

测试结果图

转载于:https://www.cnblogs.com/zyw-205520/p/6843114.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

solr做索引时抛出异常_Solr---gt;01

Solr介绍 什么叫做全文检索呢?这要从我们生活中的数据说起。 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 1、结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 2、非结构化数据&a…

新冠肺炎疫情把科研推上“云端”

来源:新华网美国威斯康星国家灵长类动物研究中心的戴夫奥康纳清晨收到在伦敦的一名合作伙伴发来的论文预印本。这项研究在中国完成,两人通过企业协同云端办公软件Slack讨论了一上午。下午2点,奥康纳打开高清会议系统GoToMeeting,和…

mysql和oracle的通用存储,MySQL与Oracle在使用上的一些区别

1.mysql与oracle数据库实现自增列的区别:mysql可以实现自增列,只要在建表时设置auto_increment即可,而oracle在建表时不能设置自增列功能,必须通过sequence序列来实现自增列功能,建立sequence序列的语句如下(假设序列名…

CSDN专訪:大数据时代下的商业存储

原文地址:http://www.csdn.net/article/2014-06-03/2820044-cloud-emc-hadoop摘要:EMC公司作为全球信息存储及管理产品方面的率先公司,不久前。EMC宣布收购DSSD加强和巩固了其在行业内的领导地位,日前我们有幸採訪到EMC中国的张安…

安装python后安装ana_Windows10+anacond+GPU+pytorch安装详细过程

1、查看自己电脑是否匹配GPU版本。设备管理器查看。查看官网是否匹配。地址:https://developer.nvidia.com/cuda-gpus **2、进入NVIDIA对电脑版本进行查**看。如果可以的的话可以自己卸载原来版本,后安装新版本。安装地址https://developer.nvidia.com/…

兵棋推演有助于我们了解哪些战争知识?

来源:兵推天下菲利普塞班博士是英国伦敦国王学院战争研究系的战略研究教授,他也是兵棋专家和兵棋设计师。在30多年的教学生涯中,他将兵棋融合到了课堂教学中,向学生展示兵棋推演对军事规划工作的实际作用。在一次访谈中&#xff0…

mssql与oracle不同点,MySql,Mssql,Oracle的优缺点和异同(欢迎补充) *

2007-10-04 14:18:151.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value…

2020 五大技术趋势:无人驾驶发展、机器视觉崛起、区块链实用化、人类增强技术、超自动化...

来源:机器人创新生态__自动驾驶技术的发展_近年来,自动驾驶技术一直在发展,特斯拉、英特尔等大公司在这一领域取得了长足的进展。虽然我们还没有达到L4级或L5级自动驾驶汽车的水平,但我们已经很接近了。为了解释每个级别的含义&am…

算法笔记_202:第三届蓝桥杯软件类决赛真题(Java高职)

目录 1 填算式 2 提取子串 3 机器人行走 4 地址格式转换 5 排日程 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 填算式 【结果填空】 (满分11分)看这个算式:☆☆☆ ☆☆☆ ☆☆☆如果每个五角星代表 1 ~ 9 的不同的数字。这个算式有多少种…

基于java的qq屏幕截图工具的设计与实现论文_众包学习:Web界面众包评估的通用工具包...

论文:Nebeling M , Speicher M , Norrie M C . CrowdStudy: general toolkit for crowdsourced evaluation of web interfaces[C]// Acm Sigchi Symposium on Engineering Interactive Computing Systems. ACM, 2013.摘要:传统的可用性测试方法既费时又昂…

oracle recover redo,oracle redo log日志(当前或非当前日志)损坏之后的db恢复

出错情况:sql> alter database open;alter database open*第 1 行出现错误:ora-01113: 文件 1 需要介质恢复ora-01110: 数据文件 1: f:/oracle/oradata/orcl/system01.dbf试图恢复数据文件出错:sql> recover datafile f:/oracle/oradata/orcl/syst…

福布斯2020年AI领域10大预测:人工智能越来越“边缘化”!

来源:人工智能和大数据毫无疑问,人工智能(AI)一直是2010年代的技术主题,随着新的十年的来临,这一趋势似乎不会消失。在过去的十年中,人们会回想起真正可以被视为“智能”机器的时代,…

vmware虚拟机克隆CentOS7 出现的网络问题解决办法

http://www.bubuko.com/infodetail-1483490.html(转) vmware虚拟机克隆CentOS7 出现的网络问题解决办法 时间:2016-04-02 07:17:00 阅读:578 评论:0 …

spss数据_职场白骨精进阶秘籍——SPSS数据分析基础

点击上方“蓝字”关注我们吧!想做数据分析,不会编程怎么办?如何让自己的数据分析更加专业?职场打拼,如何快速提升自己的竞争力?著名的未来学家托夫勒在其所著的《第三次浪潮》中将“大数据”称颂为“第三次…

php基础 简书,PHP入门基础

PHP的基础语法Class Father{//final修饰类不能被继承private $name father; //private 内部使用 protected 内部的子类使用public $age 32;const COUNT 1; //定义常量 前面不能有修饰符 不用$符号public static $id 1;//构造方法function __construct() //__开头的是魔术方…

内网python 仓库_使用 pypiserver 快速搭建内网离线 pypi 仓库实践

前言本文介绍了如何快速搭建一个 pypiserver,通过自建 pypiserver,我们可以解决网络环境不好,或者离线无法安装 python 包的问题。如果结合最新的 GitLab CI/CD 和 pipenv 我相信各位还可以玩出更多的花样。pypiserver - minimal PyPI server…

人工智能和自主系统在美军联合职能中的应用

来源:知远战略与防务研究所【知远导读】随着人工智能/自主系统技术的快速发展及其在军事领域的持续应用,智能化、无人化日渐成为未来战争的发展方向。美国作为世界军事发展潮流的引领者,正在积极探索人工智能/自主系统与联合部队作战职能的融…

oracle磁带的使用期限,rman删除磁带库过期备份问题

RMAN> show all;使用目标数据库控制文件替代恢复目录db_unique_name 为 ORCL 的数据库的 RMAN 配置参数为:CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # defaultCONFIGURE BACKUP OPTIMIZATION ON;CONFIGURE DEFAULT DEVICE TYPE TO DISK; # defaultCONFIGURE CONTROLFIL…

(转载)spring配置hibernate 事务。

Spring和Hibernate整合后,通过Hibernate API进行数据库操作时发现每次都要opensession,close,beginTransaction,commit,这些都是重复的工作,我们可以把事务管理部分交给spring框架完成。 配置事务&#xff…

oracle怎么把整形,【用bbed工具对Oracle进行微整形】

CUUG ORACLE大师网络免费课程——将个人姓名、电话发送到SIGNUPCUUG.COM即可报名CUUG新增“即时同步互动远程授课”,足不出户学ORACLE!详情见:HTTP://ORACLE.CUUG.COM/DBA1.HTML2013韩国小姐选美比赛佳丽样貌神似,难以分辨,无论是…