影视APP源码对接支付宝支付教程

确认影视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格式
  • 支付宝账户是否开通当面付功能

可通过支付宝开放平台查看实时日志,定位具体错误。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。