支付宝小程序支付

在商家开发的小程序中,用户也可以唤起支付宝收银台进行支付。小程序支付和 APP 支付的支付流程与体验基本一致,小程序支付也支持核销口碑券和口碑商户优惠功能。已签约小程序支付或在口碑开店的商户建议接入小程序支付。
小程序支付在小程序内不能通过扫码、条码、声波付等方式支付,只能唤起收银台进行支付;目前小程序支付还不支持免密支付。

主要流程:

  1. 系统后台调用本 接口会返回一个支付宝订单号,用这个订单号在小程序里,使用小程序本地接口,就可以发起支付跳到支付宝的收银台了。
  2. 用户支付成功后, 系统会发起一个支付回调给系统。

1.请求参数:

请求URL:

POST https://kf.fw199.com/gateway/partner/pay/f2f/qrpay/trade/create

参数名 类型 必须 说明
appid String 合作伙伴Id
timestamp String 必填 时间戳 请求时的时间,unixtime格式
mch_id String 必填 支付宝商户ID
ext_trade_no String 必填 开发者传入的订单 , 比如1586420573605 不可传入重复的订单号,此订单号在付款完成后,推送回调时一同返回,开发者可以根据此订单号进行业务逻辑处理。
amount int 必填 付款金额,单位分比如 350, 表示3.5 元。
attach String 可选 附加参数,200字以内 ,支付完成回调时原样返回给开发者。
body String 必填 商品说明
notify_url String 必填 支付完成后的回调通知Url , 比如, http(s)://yoururl.com/paynotify
agent_channel int 必填 支付渠道,填写 4 支付宝签约版
buyer_id String 必填 支付宝小程序里,可通过小程序授权接口,获取用户的Id
sign String 必填 签名,对各参数使用提供的AppSecret进行签名,签名逻辑具体实现见示例代码

2. 请求示例代码(Java)

    @Test
     @Test
    public void F2FQRPayTradeCreate() throws Exception {

        //支付金额 (单位分)
        String  amount = "100";
        String  mchId  = "2088341074631210"; //签约的支付宝商户号
        // 确保传入的开发者订单号唯一, 订单号生成规则开发者可自定,  修改
        String ext_trade_no =String.valueOf(System.currentTimeMillis());
        // 扩展参数,付款成功时回调给开发者时会原样返回,根据自己需求填写或为空。
        String attach ="";
        // 订单标题
        String body ="故宫3日游团票";
        //   固定用4,请不要修改
        String  agentChannel = "4";
        // 用户付款完成后,回调通知url,开发者自己的服务器Url
        String notify_url = Config.PayNotifyUrl;

        //业务参数
        Map<String, String> data = new HashMap<String, String>();
        data.put("appid",  Config.AppId);
        Long timestamp = System.currentTimeMillis() / 1000;
        data.put("timestamp", timestamp.toString());
        data.put("ext_trade_no",ext_trade_no );
        data.put("mch_id",mchId );
        data.put("amount",amount );
        data.put("attach",attach );
        data.put("body" , body );
        data.put("notify_url",notify_url );
        data.put("agent_channel",agentChannel );
        data.put("buyer_id", "2088002269364279" );

        // 参数签名
        data.put("sign", Utils.Sign(data,Config.AppSecret));
        String response = Utils.doHttpRequest(Config.F2FQRPayTradeCreateUrl, data);
        System.out.println(response);
    }

3. 返回结果

返回结果如下

{
    "code":0,
    "message":"ok",
    "data":{
        "ext_trade_no":"202112233844590979", // 开发者自己入参数时的订单号,原样返回
        "quickpay_trade_no":"20211223384459222", // 蜂巢侧的订单号         
        "trade_no":"2021122322001464271449182010" // 支付宝订单号
    },
    "trace_id":""
}}

说明: code为0表示成功,非0为失败,message会包含失败原因。

文档更新时间: 2023-09-07 18:09   作者:admin