# 微信支付-公众号支付
[TOC]
微信公众号支付是专为微信公众号设计的支付方式,用户可以在微信内完成支付,适用于公众号内的商品购买、服务付费等场景。
## 功能特性
- **微信内支付**:用户在微信内完成支付
- **安全可靠**:使用微信支付安全体系
- **简单易用**:只需调用统一下单接口
- **实时到账**:支付成功后资金实时到账
## 支付流程
### 1. 统一下单
调用统一下单接口创建支付订单,获取prepay_id。
### 2. 调起支付
使用prepay_id调起微信支付。
### 3. 支付结果
处理支付成功或失败的结果。
## 基础配置
### 配置参数
```php
<?php
$config = [
// 基础配置
'appid' => 'wx60a43dd8161666d4', // 公众号AppID
'appsecret' => 'your_wechat_appsecret', // 公众号AppSecret
'mch_id' => '1235704602', // 商户号
'mch_key' => 'your_merchant_key', // 商户密钥
// 回调配置
'notify_url' => 'https://your-domain.com/notify.php', // 支付结果通知地址
// 其他配置
'cache_path' => '/path/to/cache', // 缓存目录
'debug' => false, // 是否开启调试模式
];
```
## 基础用法
### 创建支付订单
```php
<?php
try {
// 创建支付实例
$wechat = \WePay\Order::instance($config);
// 支付参数
$options = [
'body' => '测试商品',
'out_trade_no' => 'ORDER_' . time(),
'total_fee' => '100', // 单位:分
'openid' => 'o38gpszoJoC9oJYz3UHHf6bEp0Lo',
'trade_type' => 'JSAPI',
'notify_url' => 'https://your-domain.com/notify.php',
'spbill_create_ip' => '127.0.0.1',
];
// 创建订单
$result = $wechat->create($options);
if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') {
// 订单创建成功,获取prepay_id
$prepayId = $result['prepay_id'];
// 生成JSAPI支付参数
$jsApiParams = $wechat->jsapiParams($prepayId);
// 将参数传给前端发起支付
echo json_encode($jsApiParams);
} else {
// 订单创建失败
echo "订单创建失败:" . $result['return_msg'];
}
} catch (Exception $e) {
echo "错误:" . $e->getMessage();
}
```
#### 创建支付订单接口说明
**接口地址:** `POST https://api.mch.weixin.qq.com/pay/unifiedorder`
**功能描述:**
- 创建微信公众号支付订单
- 获取预支付交易会话标识prepay_id
- 用于公众号内商品购买、服务付费等场景
**请求参数:**
- `appid` (string): 公众号AppID,必填
- `mch_id` (string): 商户号,必填
- `nonce_str` (string): 随机字符串,必填,≤32字符
- `body` (string): 商品描述,必填,≤128字符
- `out_trade_no` (string): 商户订单号,必填,≤32字符,唯一
- `total_fee` (int): 订单总金额,必填,单位分
- `spbill_create_ip` (string): 用户端IP,必填
- `notify_url` (string): 通知地址,必填
- `trade_type` (string): 交易类型,必填,JSAPI
- `openid` (string): 用户openid,必填
- `sign` (string): 签名,必填
**返回参数:**
- `return_code` (string): 通信标识,SUCCESS/FAIL
- `return_msg` (string): 返回信息
- `result_code` (string): 业务结果,SUCCESS/FAIL
- `prepay_id` (string): 预支付交易会话标识
- `trade_type` (string): 交易类型
- `code_url` (string): 二维码链接
**业务限制:**
- 订单号必须唯一
- 金额不能为0
- 需要用户授权获取openid
- 支付金额有上限限制
**注意事项:**
- 需要先获取用户openid
- 支付参数需要正确签名
- 建议设置合理的超时时间
- 需要处理支付结果通知
#### 创建支付订单案例
```php
<?php
// 微信公众号支付案例
include "WeChatDeveloper/include.php";
$config = [
'appid' => 'wx60a43dd8161666d4',
'appsecret' => 'your_wechat_appsecret',
'mch_id' => '1235704602',
'mch_key' => 'your_merchant_key',
'notify_url' => 'https://your-domain.com/notify.php',
'cache_path' => '/path/to/cache',
'debug' => false,
];
try {
$wechat = \WePay\Order::instance($config);
echo "=== 微信公众号支付 ===\n";
// 支付参数
$options = [
'body' => '测试商品',
'out_trade_no' => 'ORDER_' . time(),
'total_fee' => '100',
'openid' => 'o38gpszoJoC9oJYz3UHHf6bEp0Lo',
'trade_type' => 'JSAPI',
'notify_url' => 'https://your-domain.com/notify.php',
'spbill_create_ip' => '127.0.0.1',
];
// 创建订单
$result = $wechat->create($options);
echo "响应结果: " . json_encode($result, JSON_PRETTY_PRINT) . "\n";
if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') {
echo "订单创建成功!\n";
echo "预支付ID: " . $result['prepay_id'] . "\n";
// 生成JSAPI支付参数
$jsApiParams = $wechat->jsapiParams($result['prepay_id']);
echo "JSAPI支付参数: " . json_encode($jsApiParams, JSON_PRETTY_PRINT) . "\n";
} else {
echo "订单创建失败: " . $result['return_msg'] . "\n";
}
} catch (Exception $e) {
echo "错误: " . $e->getMessage() . "\n";
}
```
## 前端支付调用
### JavaScript调用示例
```javascript
// 调用微信支付
function callWeChatPay(jsApiParams) {
WeixinJSBridge.invoke('getBrandWCPayRequest', jsApiParams, function(res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
// 支付成功
alert("支付成功!");
// 跳转到成功页面
window.location.href = "/success.php";
} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
// 用户取消支付
alert("支付已取消");
} else {
// 支付失败
alert("支付失败:" + res.err_msg);
}
});
}
// 页面加载完成后调用
document.addEventListener('WeixinJSBridgeReady', function() {
// 获取支付参数
fetch('/create_order.php')
.then(response => response.json())
.then(data => {
if (data.success) {
callWeChatPay(data.jsApiParams);
} else {
alert("创建订单失败:" + data.message);
}
});
});
```
## 支付结果处理
### 异步通知处理
```php
<?php
// notify.php - 支付结果通知处理
$config = [
'appid' => 'wx60a43dd8161666d4',
'appsecret' => 'your_wechat_appsecret',
'mch_id' => '1235704602',
'mch_key' => 'your_merchant_key',
'cache_path' => '/path/to/cache',
];
try {
$wechat = \WePay\Order::instance($config);
// 接收支付通知
$data = $wechat->getNotify();
if ($data['return_code'] == 'SUCCESS' && $data['result_code'] == 'SUCCESS') {
// 支付成功,处理业务逻辑
$outTradeNo = $data['out_trade_no'];
$transactionId = $data['transaction_id'];
$totalFee = $data['total_fee'];
// 更新订单状态
// updateOrderStatus($outTradeNo, 'paid');
// 返回成功响应
echo $wechat->getNotifySuccessReply();
} else {
// 支付失败
echo $wechat->getNotifySuccessReply();
}
} catch (Exception $e) {
echo '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERROR]]></return_msg></xml>';
}
```
## 相关文档
- [统一下单](微信支付-统一下单.md) - 创建支付订单
- [查询订单](微信支付-查询订单.md) - 查询订单状态
- [关闭订单](微信支付-关闭订单.md) - 关闭未支付订单
- [申请退款](微信支付-申请退款.md) - 申请退款
- [查询退款](微信支付-查询退款.md) - 查询退款状态
- [支付通知](微信支付-支付通知.md) - 处理支付结果通知
- 项目介绍
- 功能模块总览
- 开发指南
- 常见问题解答
- 性能优化指南
- 安全防护指南
- 开发指南
- 环境准备及安装使用
- 接口实例及配置参数
- 目录结构及文件描述
- 推送事件及消息回复
- 生成带参数的二维码
- 媒体素材图文管理
- 微信服务号开发
- 客服消息管理
- 模板消息管理
- 基础菜单管理
- 个性化菜单管理
- 网页授权管理
- 网页JSSDK开发
- 标签管理
- 用户标签操作
- 模板管理
- 模板消息发送
- 临时素材管理
- 永久素材管理
- 卡券管理
- 卡券核销
- 卡券营销
- 蓝牙摇一摇周边
- 扫一扫管理
- 微信小程序开发
- 开发指南
- 数据解密
- 二维码生成
- 模板消息
- OCR服务
- 内容安全检测
- 物流订单管理
- 物流查询服务
- 直播间管理
- 直播商品管理
- 生物认证
- 图像处理
- 导购助手
- 运费险
- 服务市场
- 地址位置
- 插件管理
- 数据统计
- 企业微信开发
- 开发指南
- 通讯录管理
- 消息推送
- 部门基础管理
- 部门成员管理
- 用户基础管理
- 用户批量管理
- 应用管理
- 身份验证
- 完整API接口
- 微信支付开发
- 公众号支付
- V2统一下单
- V3统一下单
- 客户端发起支付
- 查询订单
- 关闭订单
- 申请退款
- 查询退款
- 支付通知
- 红包管理
- V3订单管理
- V3高级功能
- 支付宝支付开发
- 开发指南
- App支付
- 网站支付
- 手机支付
- 扫码支付
- 刷卡支付
- 转账
- 账单下载