# 支付宝支付开发 [TOC] WeChatDeveloper 提供了完整的支付宝支付解决方案,支持多种支付方式和场景,包括网站支付、手机支付、App支付、扫码支付等。 ## 快速开始案例 ### 支付宝支付基础功能案例 ```php <?php // 支付宝支付开发案例 include "WeChatDeveloper/include.php"; $config = [ 'appid' => '2021000122667306', 'private_key' => 'MIIEowIBAAKCAQEAn...', 'public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...', 'sign_type' => 'RSA2', 'notify_url' => 'https://your-domain.com/alipay/notify', 'return_url' => 'https://your-domain.com/alipay/return', 'charset' => 'utf-8', 'debug' => false, ]; try { echo "=== 支付宝支付开发案例 ===\n"; // 测试网站支付功能 $web = \AliPay\Web::instance($config); echo "✓ 网站支付功能加载成功\n"; // 测试手机支付功能 $wap = \AliPay\Wap::instance($config); echo "✓ 手机支付功能加载成功\n"; // 测试App支付功能 $app = \AliPay\App::instance($config); echo "✓ App支付功能加载成功\n"; // 测试扫码支付功能 $scan = \AliPay\Scan::instance($config); echo "✓ 扫码支付功能加载成功\n"; // 测试刷卡支付功能 $pos = \AliPay\Pos::instance($config); echo "✓ 刷卡支付功能加载成功\n"; // 测试转账功能 $transfer = \AliPay\Transfer::instance($config); echo "✓ 转账功能加载成功\n"; // 测试账单下载功能 $bill = \AliPay\Bill::instance($config); echo "✓ 账单下载功能加载成功\n"; // 测试网站支付创建订单 $orderData = [ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '0.01', 'subject' => '测试商品', 'body' => '测试商品描述', ]; echo "测试网站支付创建订单...\n"; $result = $web->apply($orderData); if ($result) { echo "✓ 网站支付订单创建成功\n"; echo "支付表单: " . substr($result, 0, 100) . "...\n"; } else { echo "✗ 网站支付订单创建失败\n"; } echo "✓ 所有支付宝支付功能测试完成\n"; } catch (Exception $e) { echo "✗ 支付宝支付功能测试失败: " . $e->getMessage() . "\n"; } ``` **接口说明:** - 支付宝支付开发的基础功能示例 - 展示多种支付方式的创建和使用 - 验证各种支付功能模块的加载 **注意事项:** - 确保AppID和密钥正确配置 - 需要配置正确的回调地址 - 建议先测试沙箱环境 ## 功能特性 - **多种支付方式**:支持网站支付、手机支付、App支付、扫码支付、刷卡支付 - **转账功能**:支持单笔转账、批量转账 - **账单管理**:支持对账单下载、交易查询 - **证书支持**:支持RSA、RSA2签名,证书模式支持 - **安全可靠**:完善的签名验证和异常处理 ## 支付方式说明 | 支付方式 | 适用场景 | 说明 | |----------|----------|------| | 网站支付 | PC网站 | 用户在PC端完成支付 | | 手机支付 | 手机浏览器 | 用户在手机浏览器中完成支付 | | App支付 | 移动应用 | 在iOS、Android等移动应用中调用支付宝支付 | | 扫码支付 | 线下扫码 | 生成二维码供用户扫码支付 | | 刷卡支付 | 线下POS | 在POS机上完成支付 | ## 基础配置 ### 公钥模式配置 ```php <?php $config = [ // 基础配置 'appid' => '2021000122667306', 'private_key' => 'MIIEowIBAAKCAQEAn...', 'public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...', 'sign_type' => 'RSA2', // 回调配置 'notify_url' => 'https://your-domain.com/alipay/notify', 'return_url' => 'https://your-domain.com/alipay/return', // 其他配置 'charset' => 'utf-8', 'debug' => false, // 生产环境设为false ]; ``` ### 证书模式配置 ```php <?php $config = [ // 基础配置 'appid' => '2021000122667306', 'private_key' => 'MIIEowIBAAKCAQEAn...', // 证书配置 'app_cert_path' => '/path/to/appPublicCert.crt', 'alipay_root_path' => '/path/to/alipayRootCert.crt', 'alipay_cert_path' => '/path/to/alipayPublicCert.crt', // 签名配置 'sign_type' => 'RSA2', // 回调配置 'notify_url' => 'https://your-domain.com/alipay/notify', 'return_url' => 'https://your-domain.com/alipay/return', ]; ``` ## 网站支付 ### 基础用法 ```php <?php try { // 创建网站支付实例 $alipay = \We::AliPayWeb($config); // 支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', ]); // 直接输出HTML表单,用户点击即可跳转支付 echo $result; } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ### 高级用法 ```php <?php try { $alipay = \We::AliPayWeb($config); // 详细支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', 'product_code' => 'FAST_INSTANT_TRADE_PAY', 'timeout_express' => '15m', 'goods_type' => '1', 'passback_params' => 'merchantBizType%3d3C%26merchantBizNo%3d2016010101111', 'extend_params' => [ 'sys_service_provider_id' => '2088511833207846' ], 'enable_pay_channels' => 'pcredit,moneyFund,debitCardExpress', 'disable_pay_channels' => 'creditCard', 'store_id' => 'NJ_001', 'specified_channel' => 'pcredit', 'business_params' => '{"data":"123"}', 'ext_user_info' => [ 'name' => '张三', 'mobile' => '159****1234', 'cert_type' => 'IDENTITY_CARD', 'cert_no' => '320301198806241234', 'min_age' => '18', 'fix_buyer' => 'true' ] ]); echo $result; } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ## 手机支付 ### 基础用法 ```php <?php try { // 创建手机支付实例 $alipay = \We::AliPayWap($config); // 支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', ]); // 直接输出HTML表单,用户点击即可跳转支付 echo $result; } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ### 高级用法 ```php <?php try { $alipay = \We::AliPayWap($config); // 详细支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', 'product_code' => 'QUICK_WAP_WAY', 'timeout_express' => '15m', 'quit_url' => 'https://your-domain.com/alipay/quit', 'extend_params' => [ 'sys_service_provider_id' => '2088511833207846' ], 'enable_pay_channels' => 'pcredit,moneyFund,debitCardExpress', 'disable_pay_channels' => 'creditCard', 'store_id' => 'NJ_001', 'specified_channel' => 'pcredit', 'business_params' => '{"data":"123"}', 'ext_user_info' => [ 'name' => '张三', 'mobile' => '159****1234', 'cert_type' => 'IDENTITY_CARD', 'cert_no' => '320301198806241234', 'min_age' => '18', 'fix_buyer' => 'true' ] ]); echo $result; } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ## App支付 ### 基础用法 ```php <?php try { // 创建App支付实例 $alipay = \We::AliPayApp($config); // 支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', ]); // 返回支付参数字符串,传给App端 echo $result; } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ### 高级用法 ```php <?php try { $alipay = \We::AliPayApp($config); // 详细支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', 'product_code' => 'QUICK_MSECURITY_PAY', 'timeout_express' => '15m', 'extend_params' => [ 'sys_service_provider_id' => '2088511833207846' ], 'enable_pay_channels' => 'pcredit,moneyFund,debitCardExpress', 'disable_pay_channels' => 'creditCard', 'store_id' => 'NJ_001', 'specified_channel' => 'pcredit', 'business_params' => '{"data":"123"}', 'ext_user_info' => [ 'name' => '张三', 'mobile' => '159****1234', 'cert_type' => 'IDENTITY_CARD', 'cert_no' => '320301198806241234', 'min_age' => '18', 'fix_buyer' => 'true' ] ]); echo $result; } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ## 扫码支付 ### 基础用法 ```php <?php try { // 创建扫码支付实例 $alipay = \We::AliPayScan($config); // 支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', ]); // 返回二维码内容 echo $result; } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ### 高级用法 ```php <?php try { $alipay = \We::AliPayScan($config); // 详细支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', 'product_code' => 'FACE_TO_FACE_PAYMENT', 'timeout_express' => '15m', 'extend_params' => [ 'sys_service_provider_id' => '2088511833207846' ], 'enable_pay_channels' => 'pcredit,moneyFund,debitCardExpress', 'disable_pay_channels' => 'creditCard', 'store_id' => 'NJ_001', 'specified_channel' => 'pcredit', 'business_params' => '{"data":"123"}', 'ext_user_info' => [ 'name' => '张三', 'mobile' => '159****1234', 'cert_type' => 'IDENTITY_CARD', 'cert_no' => '320301198806241234', 'min_age' => '18', 'fix_buyer' => 'true' ] ]); echo $result; } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ## 刷卡支付 ### 基础用法 ```php <?php try { // 创建刷卡支付实例 $alipay = \We::AliPayPos($config); // 支付参数 $result = $alipay->apply([ 'out_trade_no' => 'ORDER_' . time(), 'total_amount' => '100.00', 'subject' => '商品名称', 'body' => '商品描述', 'auth_code' => '123456789012345678', ]); // 处理支付结果 if ($result['code'] == '10000') { echo "支付成功"; } else { echo "支付失败:" . $result['sub_msg']; } } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ## 转账功能 ### 单笔转账 ```php <?php try { // 创建转账实例 $transfer = \We::AliPayTransfer($config); // 转账参数 $result = $transfer->create([ 'out_biz_no' => 'TRANSFER_' . time(), 'trans_amount' => '10.00', 'product_code' => 'TRANS_ACCOUNT_NO_PWD', 'biz_scene' => 'DIRECT_TRANSFER', 'payee_info' => [ 'identity' => 'zoujingli@qq.com', 'identity_type' => 'ALIPAY_LOGON_ID', 'name' => '收款人姓名', ], 'remark' => '转账备注', ]); // 处理转账结果 if ($result['code'] == '10000') { echo "转账成功"; } else { echo "转账失败:" . $result['sub_msg']; } } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ### 批量转账 ```php <?php try { $transfer = \We::AliPayTransfer($config); // 批量转账参数 $result = $transfer->batchCreate([ 'out_biz_no' => 'BATCH_TRANSFER_' . time(), 'total_count' => '2', 'total_amount' => '20.00', 'product_code' => 'TRANS_ACCOUNT_NO_PWD', 'biz_scene' => 'DIRECT_TRANSFER', 'trans_order_infos' => [ [ 'out_biz_no' => 'TRANSFER_1_' . time(), 'trans_amount' => '10.00', 'payee_info' => [ 'identity' => 'zoujingli@qq.com', 'identity_type' => 'ALIPAY_LOGON_ID', 'name' => '收款人1', ], 'remark' => '转账备注1', ], [ 'out_biz_no' => 'TRANSFER_2_' . time(), 'trans_amount' => '10.00', 'payee_info' => [ 'identity' => 'test@qq.com', 'identity_type' => 'ALIPAY_LOGON_ID', 'name' => '收款人2', ], 'remark' => '转账备注2', ] ] ]); // 处理转账结果 if ($result['code'] == '10000') { echo "批量转账成功"; } else { echo "批量转账失败:" . $result['sub_msg']; } } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ## 账单管理 ### 下载对账单 ```php <?php try { // 创建账单实例 $bill = \We::AliPayBill($config); // 下载对账单 $result = $bill->download([ 'bill_type' => 'trade', 'bill_date' => '2023-01-01', ]); // 保存对账单 file_put_contents('alipay_bill.csv', $result); } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ### 查询交易 ```php <?php try { $bill = \We::AliPayBill($config); // 查询交易 $result = $bill->query([ 'out_trade_no' => 'ORDER_123456789', ]); // 处理查询结果 if ($result['code'] == '10000') { echo "交易查询成功"; var_dump($result); } else { echo "交易查询失败:" . $result['sub_msg']; } } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ## 支付回调处理 ### 处理支付通知 ```php <?php try { // 创建支付实例 $alipay = \We::AliPayWeb($config); // 处理支付通知 $result = $alipay->notify(); if ($result['code'] == '10000') { // 支付成功,处理业务逻辑 $outTradeNo = $result['out_trade_no']; $tradeNo = $result['trade_no']; $totalAmount = $result['total_amount']; // 更新订单状态 // updateOrderStatus($outTradeNo, 'paid'); echo "success"; } else { echo "fail"; } } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ### 处理转账通知 ```php <?php try { $transfer = \We::AliPayTransfer($config); // 处理转账通知 $result = $transfer->notify(); if ($result['code'] == '10000') { // 转账成功,处理业务逻辑 $outBizNo = $result['out_biz_no']; $transAmount = $result['trans_amount']; // 更新转账状态 // updateTransferStatus($outBizNo, 'success'); echo "success"; } else { echo "fail"; } } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ``` ## 参数说明 ### 基础参数 | 参数名 | 类型 | 必需 | 说明 | |--------|------|------|------| | `out_trade_no` | string | 是 | 商户订单号,唯一 | | `total_amount` | string | 是 | 订单总金额,单位:元 | | `subject` | string | 是 | 订单标题 | | `body` | string | 否 | 订单描述 | | `product_code` | string | 是 | 产品码 | | `timeout_express` | string | 否 | 订单超时时间 | ### 高级参数 | 参数名 | 类型 | 必需 | 说明 | |--------|------|------|------| | `goods_type` | string | 否 | 商品类型 | | `passback_params` | string | 否 | 回传参数 | | `extend_params` | array | 否 | 扩展参数 | | `enable_pay_channels` | string | 否 | 可用支付渠道 | | `disable_pay_channels` | string | 否 | 禁用支付渠道 | | `store_id` | string | 否 | 商户门店编号 | | `specified_channel` | string | 否 | 指定支付渠道 | | `business_params` | string | 否 | 业务参数 | | `ext_user_info` | array | 否 | 外部用户信息 | ## 错误处理 ### 常见错误码 | 错误码 | 说明 | 解决方案 | |--------|------|----------| | `ACQ.SYSTEM_ERROR` | 系统错误 | 请稍后重试 | | `ACQ.INVALID_PARAMETER` | 参数错误 | 检查参数是否正确 | | `ACQ.ACCESS_FORBIDDEN` | 无权限 | 检查应用权限 | | `ACQ.EXIST_FORBIDDEN_WORD` | 存在禁用词 | 检查订单标题和描述 | | `ACQ.PARTNER_ERROR` | 应用状态错误 | 检查应用状态 | | `ACQ.TOTAL_FEE_EXCEED` | 订单总金额超限 | 检查订单金额 | | `ACQ.CONTEXT_INCONSISTENT` | 交易信息被篡改 | 检查交易信息 | | `ACQ.TRADE_HAS_SUCCESS` | 交易已支付 | 检查交易状态 | | `ACQ.TRADE_HAS_CLOSE` | 交易已关闭 | 检查交易状态 | | `ACQ.BUYER_BALANCE_NOT_ENOUGH` | 买家余额不足 | 提示用户充值 | ### 异常处理示例 ```php <?php try { $alipay = \We::AliPayWeb($config); $result = $alipay->apply($params); // 检查返回结果 if (isset($result['code']) && $result['code'] != '10000') { throw new Exception('支付失败:' . $result['sub_msg']); } echo $result; } catch (\AliPay\Exceptions\InvalidResponseException $e) { // 接口调用异常 echo "接口错误:" . $e->getMessage(); } catch (Exception $e) { // 其他异常 echo "系统错误:" . $e->getMessage(); } ``` ## 最佳实践 ### 1. 订单管理 - 使用有意义的订单号,便于管理 - 实现订单状态跟踪 - 处理重复订单和异常订单 ### 2. 安全考虑 - 验证所有回调参数 - 使用HTTPS传输 - 定期更新密钥和证书 ### 3. 性能优化 - 使用异步处理耗时操作 - 实现重试机制 - 优化数据库查询 ### 4. 用户体验 - 提供友好的错误提示 - 实现支付状态查询 - 优化支付流程 ## 注意事项 1. **沙箱环境**:开发阶段建议使用沙箱环境测试 2. **证书管理**:妥善保管私钥和证书文件 3. **回调处理**:确保回调接口稳定可靠 4. **金额处理**:注意金额精度问题 5. **字符编码**:统一使用UTF-8编码 6. **签名验证**:严格验证所有签名 7. **异常处理**:实现完善的异常处理机制