
确认影视app源码已安装并运行环境就绪后,需进行支付宝支付接口对接。以PHP为例,展示标准对接流程与关键配置。
获取支付宝开发者信息
登录支付宝开放平台(https://open.alipay.com/),进入应用管理,获取以下关键信息:
参数 | 说明 |
---|---|
AppID | 支付宝分配给应用的唯一标识 |
商户私钥 | 用于签名请求的RSA私钥,下载密钥文件 |
支付宝公钥 | 支付宝提供的公钥,用于验证响应签名 |
将商户私钥文件上传至服务器,路径建议存放在/config/alipay/
目录下。
配置支付宝支付参数
在APP源码中创建支付配置文件config/alipay.php
,内容如下:
return [
'app_id' => '202100',
'merchant_private_key' => file_get_contents('/config/alipay/merchant_private.key'),
'alipay_public_key' => '-----BEGIN PUBLIC KEY-----n...n-----END PUBLIC KEY-----',
'notify_url' => 'https://yourdomain.com/api/pay/notify',
'return_url' => 'https://yourdomain.com/api/pay/return',
'charset' => 'UTF-8',
'sign_type' => 'RSA2',
'timeout_express'=> 30, // 超时时间(分)
];
注意:商户私钥需使用file_get_contents
读取文件内容,而非直接赋值。
实现支付请求接口
创建支付控制器app/Http/Controllers/PayController.php
,添加alipayPay
方法:
public function alipayPay(Request $request)
{
$order = Order::find($request->input('order_id'));
if (!$order || $order->status !== 'pending') {
return response()->json(['code' => 400, 'msg' => '订单无效']);
}
$alipay = new AlipayService();
$result = $alipay->createPay([
'out_trade_no' => $order->no,
'total_amount' => $order->amount,
'subject' => '影视会员购买',
'body' => '会员有效期:30天',
]);
if ($result['code'] === 200) {
return redirect($result['result']['alipay_url']);
}
return response()->json(['code' => 500, 'msg' => '支付创建失败']);
}
支付宝服务端通知处理
实现api/pay/notify
接口,完整代码如下:
public function notify()
{
$alipay = new AlipayService();
$data = $alipay->handleNotify();
if ($data['code'] === 200) {
// 检查订单状态
$order = Order::where('no', $data['result']['out_trade_no'])
->where('status', 'pending')
->first();
if ($order) {
// 更新订单状态
$order->update([
'status' => 'paid',
'transaction_id' => $data['result']['trade_no'],
'paid_at' => now(),
]);
// 构建通知返回
$result = [
'status' => true,
'msg' => '处理成功',
];
} else {
// 订单已处理或不存在
$result = [
'status' => false,
'msg' => '订单无效',
];
}
} else {
// 支付宝验证失败
$result = [
'status' => false,
'msg' => '验证异常',
];
}
// 通知支付宝处理结果
return response()->json($result)->header('Content-Type', 'text/');
}
关键点说明:
- 支付宝签名验证需使用公钥,参数排序必须按支付宝文档要求
- 处理完成后必须返回固定格式的JSON响应
- 通知接口建议设置超时时间,防止重复通知
支付宝JavaScript SDK集成
在支付页面引入SDK:
<script src="https://g.alicdn.com/pkg/alipayjs-sdk/2.2.0/antx.js"></script>
<script>
AlipayJSAPI.init({
appId: '202100',
notifyUrl: 'https://yourdomain.com/api/pay/notify',
returnUrl: 'https://yourdomain.com/api/pay/return',
charset: 'utf-8',
signType: 'RSA2',
timeoutExpress: 30
});
</script>
调用支付方法:
<button onclick="alipayPay()">立即支付</button>
<script>
function alipayPay() {
AlipayJSAPI.exec('alipay', {
outTradeNo: 'ORD20230101',
totalAmount: 99.00,
subject: '影视会员',
body: '会员有效期30天',
productCode: 'FACE_TO_FACE_PAYMENT'
});
}
</script>
常见问题排查
若支付失败,需检查以下问题:
- 签名参数是否按支付宝文档规范生成
- notify_url接口是否可被支付宝访问(端口需开放80/443)
- 商户私钥是否正确配置,建议使用PEM格式
- 支付宝账户是否开通当面付功能
可通过支付宝开放平台查看实时日志,定位具体错误。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。