写在前面
小程序支付和 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 公众号、支付宝口碑支付取消支付 } });
这样,支付宝小程序支付就接入成功了!