支付宝App支付

接入主体: 企业支付宝或个人支付宝
场景: App 支付是指商家在商家移动端 App 中集成支付宝 SDK,调起支付宝来完成付款的一种支付产品。适用于在商家移动端 App 内使用支付宝支付功能的场景。该产品在签约完成后,需要技术集成完成后方可使用。

一、业务流程

二、请求地址:

https://kf.fw199.com/gateway/partner/pay/alipay/personal/app

请求参数

参数名 类型 说明 示例
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 ,确保公网可访问
sign String 签名 对各参数使用提供的AppSecret进行签名,签名逻辑具体实现见示例代码

请求示例

    @Test   
    public void PayAlipayPersonalCreateAppPay() throws Exception {
        //支付金额 (单位分)
        String  amount ="1000";
        String  mchId  ="20886105xxxxx"; //由蜂巢提供的支付宝商户号,请联系蜂巢客服获取。
        // 确保传入的开发者订单号唯一, 订单号生成规则开发者可自定,  修改
        String ext_trade_no =String.valueOf(System.currentTimeMillis());
        // 扩展参数,付款成功时回调给开发者时会原样返回,根据自己需求填写或为空。
        String attach ="";
        // 订单标题
        String body ="支付测试商品0812-1";
        // 回调通知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("sign", Utils.Sign(data, Config.AppSecret   ));
        String result = doHttpRequest(Config.PayAlipayPersonalCreateAppPayUrl,data);
        System.out.println(result);

    }

三、接口返回结果:

{
    "code": 0,
    "message": "ok",
    "data": {
        "order_info": "alipay_root_cert_sn=687b59193f3f462dd5336e5abf83c5d8_02941eef3187dddf3d3b83462e1dfcf6\u0026app_cert_sn=1bc7a36570b29c9cb8e292ea47b37b5a\u0026app_id=2021003124663063\%3A29\u0026version=1.0"
    },
    "trace_id": ""
}

限于篇幅,上面order_info的内容做了部分删除 。

返回参数说明

参数名 类型 说明 示例
code int 0时为成功,非0为失败
message String 消息 code非0时,会包含错误的出错信息
order_info String 支付串,可以在自己的App直接传给支付宝App,以唤起支付宝收银台 成功才有order_info 值

商家后台调用蜂巢接口获取支付宝的支付串后,返回自己的手机App, 手机App再传给支付宝App,以唤起支付宝收银台 , 用户付款后,蜂巢将会推送付款通知,如何处理付款回调通知,请见支付回调通知

三、手机App端的处理

以Android为例,可参考支付宝官方的Demo, https://opendocs.alipay.com/open/54/104509?pathHash=0e6ee6b9
通过后台接口获取支付宝支付串order_info后,在手机App里唤起支付宝。

    public void payV2(View v) { 

        // orderInfo从服务端后台接口获取
        final String orderInfo = "alipay_root_cert_sn=687b59193f3f462dd5336e5abf83c5d8_02xxxxxxxxxxxxx"; 
        final Runnable payRunnable = new Runnable() { 
            @Override
            public void run() {
                PayTask alipay = new PayTask(PayDemoActivity.this);
                Map<String, String> result = alipay.payV2(orderInfo, true);
                Log.i("msp", result.toString()); 
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };

        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

当支付宝支付完成后,会通过URL Scheme的方式返回到你的app。当然,真正的支付结果以异步通知为准 。

四、支付效果图

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