# 支付宝支付开发
[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. **异常处理**:实现完善的异常处理机制
- 项目介绍
- 功能模块总览
- 开发指南
- 常见问题解答
- 性能优化指南
- 安全防护指南
- 开发指南
- 环境准备及安装使用
- 接口实例及配置参数
- 目录结构及文件描述
- 推送事件及消息回复
- 生成带参数的二维码
- 媒体素材图文管理
- 微信服务号开发
- 客服消息管理
- 模板消息管理
- 基础菜单管理
- 个性化菜单管理
- 网页授权管理
- 网页JSSDK开发
- 标签管理
- 用户标签操作
- 模板管理
- 模板消息发送
- 临时素材管理
- 永久素材管理
- 卡券管理
- 卡券核销
- 卡券营销
- 蓝牙摇一摇周边
- 扫一扫管理
- 微信小程序开发
- 开发指南
- 数据解密
- 二维码生成
- 模板消息
- OCR服务
- 内容安全检测
- 物流订单管理
- 物流查询服务
- 直播间管理
- 直播商品管理
- 生物认证
- 图像处理
- 导购助手
- 运费险
- 服务市场
- 地址位置
- 插件管理
- 数据统计
- 企业微信开发
- 开发指南
- 通讯录管理
- 消息推送
- 部门基础管理
- 部门成员管理
- 用户基础管理
- 用户批量管理
- 应用管理
- 身份验证
- 完整API接口
- 微信支付开发
- 公众号支付
- V2统一下单
- V3统一下单
- 客户端发起支付
- 查询订单
- 关闭订单
- 申请退款
- 查询退款
- 支付通知
- 红包管理
- V3订单管理
- V3高级功能
- 支付宝支付开发
- 开发指南
- App支付
- 网站支付
- 手机支付
- 扫码支付
- 刷卡支付
- 转账
- 账单下载