PHP服务端集成支付宝APP支付实例
本文将详细讲解如何使用PHP在服务端集成支付宝APP支付,让你更好地了解支付宝APP支付的流程和如何在服务端进行相应的配置和处理。
准备工作
在开始之前,需要确保你已经具备以下条件:
-
支付宝开放平台已注册并且开通了APP支付服务,同时已经获取到了
App ID
和App Secret
-
PHP环境已经搭建完成,并且已经安装了支付宝SDK
创建支付请求
在服务端创建支付请求的过程中,需要按照以下步骤进行:
1. 生成订单号
首先需要生成一个唯一的订单号,我们可以使用uniqid()
函数来生成:
$out_trade_no = uniqid();
2. 构建支付请求参数
接下来,需要构建支付请求所需的参数,具体参数以及参数含义可以参考支付宝文档,这里简单列举一下可能需要用到的参数:
// 应用ID
$app_id = '你的App ID';
// 支付宝公钥
$alipay_public_key = '支付宝公钥';
// 商户私钥
$merchant_private_key = '商户私钥';
// 订单金额,单位为元,保留两位小数
$total_amount = '0.01';
//订单标题
$subject = '测试商品';
//异步回调地址,支付成功后支付宝会调用此地址通知支付结果
$notify_url = '你的回调地址';
//订单描述
$body = '测试商品描述';
// 商品编号
$goods_id = '001';
// 商品数量
$quantity = 1;
// 商户订单号
$out_trade_no = '订单号';
// 设置支付超时时间,单位为分钟
$timeout_express = '30m';
// 支付场景,根据业务情况自行设定
$scene = 'ALIPAY_APP';
以上参数可以根据实际情况进行修改和定制。需要注意的是,$notify_url
是支付宝异步通知的回调地址,支付成功后支付宝会通过该地址通知支付结果。这个地址需要确保能够被外网访问到,同时也需要在支付宝开放平台进行配置。
3. 生成签名
生成签名是很重要的一步,需要按照支付宝的规范进行签名生成,具体操作可以参考签名与验签。
// 组装签名参数
$sign_params = [
'app_id' => $app_id,
'biz_content' => json_encode([
'timeout_express' => $timeout_express,
'seller_id' => '',
'product_code' => 'QUICK_MSECURITY_PAY',
'total_amount' => $total_amount,
'subject' => $subject,
'body' => $body,
'out_trade_no' => $out_trade_no,
'goods_id' => $goods_id,
'quantity' => $quantity,
'passback_params' => 'no-data',
'promo_params' => '',
'extend_params' => '',
], JSON_UNESCAPED_UNICODE),
'charset' => 'UTF-8',
'method' => 'alipay.trade.app.pay',
'sign_type' => 'RSA2',
'timestamp' => date('Y-m-d H:i:s'),
'version' => '1.0',
];
// 生成签名
$sign_params['sign'] = generate_sign($sign_params, $merchant_private_key, 'RSA2');
在上述的代码中,$sign_params
是用来组装签名参数的数组,其中biz_content
字段是具体的业务参数,需要进行JSON格式编码。在生成签名之前,还需要调用generate_sign()
函数来生成签名字符串,需要传入签名参数、商户私钥和签名类型。
4. 返回支付宝支付结果
最后,需要将生成的支付参数返回给客户端,让客户端根据返回的参数进行支付。可以使用如下代码来进行参数返回:
$response = [
'code' => 0,
'msg' => 'success',
'payInfo' => $sign_params,
];
echo json_encode($response);
接收支付宝支付异步通知
在支付宝支付流程中,支付成功后支付宝会通过回调地址向服务端发送异步通知,通知服务端该笔交易的支付结果。在服务端接收到通知后,需要验证该笔交易的真实性,同时处理相应的业务逻辑。下面是具体的操作步骤:
1. 验证签名
在接收到支付宝的异步通知之后,需要首先进行签名验证,以此确认该通知的真实性:
// 获取支付宝的通知数据
$raw_data = file_get_contents('php://input');
// 将通知数据转换为数组形式
$notify_data = json_decode($raw_data, true);
// 获取签名
$sign = $notify_data['sign'];
// 将不需要参与签名的字段剔除
unset($notify_data['sign_type']);
unset($notify_data['sign']);
// 验证签名
$verify_result = verify_sign($notify_data, $alipay_public_key, $sign, 'RSA2');
if (!$verify_result) {
exit('Sign verification failed');
}
在上述代码中,我们首先使用file_get_contents()
函数获取到支付宝的异步通知数据,然后将该数据转换为数组形式,在从数组中抽取出签名并将不需要参与签名的字段剔除。最后,我们调用verify_sign()
函数来验证签名,需要传入所有的接收到的通知参数、支付宝公钥、签名以及签名类型。如果签名验证失败,则直接退出程序并输出错误信息。
2. 处理业务逻辑
在签名验证通过之后,就可以对支付宝返回的异步通知进行相应的业务逻辑处理。具体的操作步骤可以参考支付宝异步通知开发示例。在对业务进行处理的同时,一定要注意保持程序的健壮性,以免因为意外错误而导致业务出现异常。
示例说明
本文演示了如何使用PHP在服务端集成支付宝APP支付,我们使用了uniqid()
函数来生成订单号,并且构建了一些基本的支付请求参数,同时还包含了生成签名和返回支付结果的相关代码。在接收支付宝支付异步通知部分,我们使用了签名验证和业务逻辑的处理来处理支付宝发来的异步通知,以此来验证某笔交易的真实性并进行相应的业务处理。如果你还想了解相关的详细实现,可以参考官方文档。