Ping++ 接入支付宝小程序的流程

更新于:2018年11月29日 17:25:59

写在前面

小程序支付和 APP 支付在小程序内的支付流程与体验基本一致,但是小程序支付在小程序内不能通过扫码、条码等方式支付,只能唤起收银台进行支付。

接入流程

一、准备工作:

1、在支付宝申请小程序支付权限,参考 如何自行申请支付宝小程序支付?

2、将申请到的参数配置至 Ping++ 管理平台,如何配置请联系 Ping++ 。

2、下载 Ping++ 包含「支付宝小程序支付」的最新版 H5-SDK 。

3、下载 Ping++ 的 Server-SDK (以 PHP 为例)

二、获取 buyer_user_id 参数

因后端 API 在使用支付宝小程序渠道(alipay_lite)时,需要传入 buyer_user_id(用户在支付宝处的唯一 userId),所以你需要先获取到此参数,获取方法如下:

    ① 在小程序客户端通过用户授权获取 authCode,也可参考支付宝官方文档:用户授权

my.getAuthCode({
	scopes: 'auth_user',	
	success: (res) = > {		
	    my.alert({			
	        content: res.authCode,		
	    });	
	},
});

    ② 将获取到的 authCode 传给后端,调用 alipay.system.oauth.token(换取授权访问令牌)接口来获取 buyer_user_id(对应支付宝为 user_id),详见支付宝官方文档:换取授权访问令牌


三、Server 端的接入

1、下载 Ping++ 的 Server-SDK

2、调用 Ping++ 的 SDK 创建 Charge(与其他渠道的接入一样)

    $input_data = json_decode(file_get_contents('php://input'), true);
    $channel = strtolower($input_data['channel']);
    $amount = $input_data['amount'];
    $orderNo = substr(md5(time()), 0, 12); 
    $open_id = $input_data['open_id'];
    $extra = array();
    switch ($channel) {
      case 'alipay_lite':
        $extra = array(
            'buyer_user_id' => $buyer_user_id //API 请求参数中的 buyer_user_id
        );
        break;
    }
    try {
    $ch = \Pingpp\Charge::create(
        array(
            //请求参数字段规则,请参考 API 文档:https://www.pingxx.com/api
            'subject'   => 'Your Subject',
            'body'      => 'Your Body',
            'amount'    => $amount,//订单总金额, 人民币单位:分(如订单总金额为 1 元,此处请填 100)
            'order_no'  => $orderNo,// 推荐使用 8-20 位,要求数字或字母,不允许其他字符
            'currency'  => 'cny',
            'extra'     => $extra,
            'channel'   => $channel,// 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
            'client_ip' => $_SERVER['REMOTE_ADDR'],// 发起支付请求客户端的 IP 地址,格式为 IPV4,如: 127.0.0.1
            'app'       => array('id' => APP_ID)
        )
    );
    echo $ch;// 输出 Ping++ 返回的支付凭据 Charge
} catch (\Pingpp\Error\Base $e) {
    // 捕获报错信息
    if ($e->getHttpStatus() != NULL) {
        header('Status: '. $e->getHttpStatus());
        echo $e->getHttpBody();
    } else {
        echo $e->getMessage();
    }
}

四、Client 端接入

1、将我们之前下载好的 Ping++ 的 H5 端 SDK 导入到工程中

2、调用 Ping++ 的 H5-SDK 实现支付功能

// 参数一:支付参数 charge/order/recharge
// 参数二:支付结果回调
pingpp.createPayment(data, function(result, err) {  
    if (result == "success") {   
         // 只有微信公众账号 (wx_pub)、微信小程序 (wx_lite)、QQ 公众号 (qpay_pub)、支付宝口碑 (alipay_qr)
        // 支付成功的结果会在这里返回,其他的支付结果都会跳转到 extra 中对应的 URL。
    } else if (result == "fail") {    
        // data 不正确或者微信公众账号/微信小程序/QQ 公众号/支付宝口碑支付失败时会在此处返回
    } else if (result == "cancel") {    
        // 微信公众账号、微信小程序、QQ 公众号、支付宝口碑支付取消支付
    }
});


这样,支付宝小程序支付就接入成功了!


    您需要登录后才可以回复