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

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

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

1、什么是当面付呢?

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

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

2、申请条件

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

3、产品费率

单笔费率 0.6%

4、签约认证流程

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

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

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

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

使用步骤:

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

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

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

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

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

这里主要涉及到三个接口

这里我们使用官方提供的服务端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=="
}

时间: 2024-09-29 10:23:48

支付宝支付-刷卡支付(条码支付)详解的相关文章

Android4.X中SIM卡信息初始化过程详解_Android

本文实例讲述了Android4.X中SIM卡信息初始化过程详解.分享给大家供大家参考,具体如下: Phone 对象初始化的过程中,会加载SIM卡的部分数据信息,这些信息会保存在IccRecords 和 AdnRecordCache 中.SIM卡的数据信息的初始化过程主要分为如下几个步骤 1.RIL 和 UiccController 建立监听关系 ,SIM卡状态发生变化时,UiccController 第一个去处理. Phone 应用初始化 Phone 对象时会建立一个 RIL 和UiccCont

Android4.X中SIM卡信息初始化过程详解

本文实例讲述了Android4.X中SIM卡信息初始化过程详解.分享给大家供大家参考,具体如下: Phone 对象初始化的过程中,会加载SIM卡的部分数据信息,这些信息会保存在IccRecords 和 AdnRecordCache 中.SIM卡的数据信息的初始化过程主要分为如下几个步骤 1.RIL 和 UiccController 建立监听关系 ,SIM卡状态发生变化时,UiccController 第一个去处理. Phone 应用初始化 Phone 对象时会建立一个 RIL 和UiccCont

支付宝推出移动支付产品“超级支付”刷卡器

支付宝今日展示了实验性产品"超级支付",刷卡终端与APP配合使用,主要面向商户,收费时可实现银行卡直接向支付宝划款. 新浪科技在支付宝今日的产品沟通会上看到,这款产品分为两部分:插在手机耳机孔.能识别银行卡的刷卡器,和可用在iPhone.iPad上的"超级支付"应用APP. 使用时,付费方将银行卡划过刷卡器,收费方APP识别出该卡卡号.如该卡已与支付宝绑定,则向与支付宝同时绑定的手机号http://www.aliyun.com/zixun/aggregation/1

支付宝支付开发——当面付条码支付和扫码支付

关键字:支付宝 当面付 条码支付 扫码支付 二维码支付 订单查询 退款作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/alipay-f2fpay.html    本文介绍支付宝中当面付下属的条码支付.扫码支付.订单查询.退款申请的集成开发过程.   本文分为以下五个部分: 条码支付和扫码支付介绍 申请应用 密钥生成及配置 API及SDK集成 条码支付.扫码支付.订单查询.退款申请   注: 支付宝支付开发有一定的门槛,如果您愿意为知识付费来节省您宝贵的时

支付宝支付开发——当面付条码支付和扫码支付实例_php实例

本文介绍支付宝中当面付下属的条码支付.扫码支付.订单查询.退款申请的集成开发过程.  本文分为以下五个部分: 条码支付和扫码支付介绍 申请应用 密钥生成及配置 API及SDK集成 条码支付.扫码支付.订单查询.退款申请  一.条码支付及二维码支付介绍 1. 条码支付 条码支付是支付宝给到线下传统行业的一种收款方式.商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款.用户仅需出示付款码,所有收款操作由商家端完成.其使用场景如下: 业务流程: 使用步骤: 用户登陆支付宝钱包,点

微信支付 开发账号体系各参数详解_JSP编程

商户在微信公众平台提交申请资料以及银行账户资料,资料审核通过并签约后,可以获得表6-4所示帐户(包含财付通的相关支付资金账户),用于公众帐号支付. 帐号及作用: appId :公众帐号身份的唯一标识.审核通过后,在微信发送的邮件中查看. appSecret :公众帐号支付请求中用于加密的密钥Key,可验证商户唯一身份,PaySignKey对应于支付场景中的appKey值.审核通过后,在微信发送的邮件中查看. paySignKey:除了支付请求需要用到paySignKey,公众平台接口API的权限

天天酷跑极速世界刷金币刷钻石方法详解

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   新版的<天天酷跑>游戏即将开放,而其中增加的极速世界模式引起了很多玩家的关注.想必大家都对极速世界模式非常好奇,而且不知道该模式是个怎样的玩法.下面小编就来简单介绍下<天天酷跑>中,极速世界的玩法与操作.欢迎加入天天酷跑讨论群(301953729 ),大家一起交流讨论,体验游戏带来的乐趣! <天天酷跑>极速世界最新玩法模式详解

手游灌篮高手高星级卡牌怎么得 高品质卡牌获取途径详解

在灌篮高手手游中获取卡牌的途径各种各样,不知道大家知不知道灌篮高手手游高效低耗卡牌的获取途径呢?接下来小编就来和大家分析下灌篮高手手游高效低耗卡牌获取途径....... 灌篮高手卡牌除了抽卡刷本以外,还有一个特殊的途径可以获取,那就是神秘商店!神秘商店是一个每隔2个小时自动刷新商品列表的商店,商店中经常出售一些高星级卡牌.卡牌碎片还有装备等等,不过你需要支付钻石或者SD点数才能购买(SD点数可以通过分解5星以上卡牌获得).

DNF鬼泣80级版本纯刷图加点推荐 技能详解

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   [科技讯]1月16日消息,DNF鬼泣作为刀魂卡赞一族的魔法王者,区别于红眼和剑魂的物理输出,鬼泣更擅长于魔法伤害,短剑太刀是他的趁手武器.而短剑在鬼剑系武器中,是魔攻最高的武器,智力略低于太刀..目前已经是主流鬼泣刷图使用的武器. 在这个鬼泣需要百分比的时代,魔攻的多少,意味着输出的高低. 鬼泣三改之后的鬼影步,普通攻击附加百分比伤害.等等.注定了短剑将在未来的