Skip to content

收款演示

演示环境

我们提供完整的演示环境,帮助您快速了解茄椒支付的功能和使用方式。

演示地址

技术演示

PHP SDK 使用演示

下载PHP SDK

bash
composer require qiejiao/payment-sdk

初始化配置

php
<?php
require_once 'vendor/autoload.php';

use QieJiao\Payment\Client;

// 初始化支付客户端
$client = new Client([
    'merchant_id' => 'your_merchant_id',
    'api_key' => 'your_api_key',
    'private_key' => 'path/to/private_key.pem',
    'public_key' => 'path/to/public_key.pem',
    'environment' => 'sandbox' // sandbox 或 production
]);

创建支付订单

php
// 创建支付订单
$order = $client->order->create([
    'order_no' => 'TEST' . date('YmdHis'),
    'amount' => '0.01', // 测试金额
    'subject' => '测试商品',
    'body' => '测试商品描述',
    'notify_url' => 'https://your-domain.com/notify',
    'return_url' => 'https://your-domain.com/return',
    'pay_type' => 'wechat' // 微信支付
]);

if ($order['code'] == 200) {
    // 获取支付链接
    $payUrl = $order['data']['pay_url'];
    // 重定向到支付页面
    header('Location: ' . $payUrl);
    exit;
} else {
    echo '创建订单失败: ' . $order['msg'];
}

处理异步通知

php
// 异步通知处理
public function notify()
{
    $data = $_POST;
    
    // 验证签名
    if (!$this->validateSignature($data)) {
        http_response_code(400);
        exit('签名验证失败');
    }
    
    // 处理订单逻辑
    $orderNo = $data['order_no'];
    $status = $data['status'];
    
    if ($status === 'paid') {
        // 更新订单状态为已支付
        $this->updateOrderStatus($orderNo, 'paid');
        
        // 处理业务逻辑
        $this->handlePaidOrder($orderNo);
    }
    
    // 返回成功响应
    http_response_code(200);
    echo 'success';
}

前端集成示例

HTML支付页面

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>支付页面</title>
    <style>
        .payment-container {
            max-width: 400px;
            margin: 50px auto;
            padding: 20px;
            border: 1px solid #ddd;
            border-radius: 8px;
        }
        .payment-methods {
            margin: 20px 0;
        }
        .payment-method {
            padding: 10px;
            border: 1px solid #eee;
            margin: 5px 0;
            cursor: pointer;
        }
        .payment-method.selected {
            border-color: #1890ff;
            background-color: #f0f8ff;
        }
        .pay-button {
            width: 100%;
            padding: 12px;
            background-color: #1890ff;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div class="payment-container">
        <h2>支付订单</h2>
        <div class="order-info">
            <p>订单号: <span id="orderNo">20240101000001</span></p>
            <p>金额: <span id="amount">100.00</span>元</p>
            <p>商品: <span id="subject">测试商品</span></p>
        </div>
        
        <div class="payment-methods">
            <div class="payment-method" data-type="wechat">
                <input type="radio" name="payType" value="wechat" checked>
                <label>微信支付</label>
            </div>
            <div class="payment-method" data-type="alipay">
                <input type="radio" name="payType" value="alipay">
                <label>支付宝</label>
            </div>
            <div class="payment-method" data-type="unionpay">
                <input type="radio" name="payType" value="unionpay">
                <label>银联支付</label>
            </div>
        </div>
        
        <button class="pay-button" onclick="createOrder()">立即支付</button>
    </div>

    <script>
        // 选择支付方式
        document.querySelectorAll('.payment-method').forEach(item => {
            item.addEventListener('click', function() {
                document.querySelectorAll('.payment-method').forEach(el => {
                    el.classList.remove('selected');
                });
                this.classList.add('selected');
                this.querySelector('input').checked = true;
            });
        });

        // 创建订单
        async function createOrder() {
            const payType = document.querySelector('input[name="payType"]:checked').value;
            
            try {
                const response = await fetch('/api/create-order', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                        orderNo: document.getElementById('orderNo').textContent,
                        amount: document.getElementById('amount').textContent,
                        subject: document.getElementById('subject').textContent,
                        payType: payType
                    })
                });

                const result = await response.json();
                
                if (result.code === 200) {
                    // 跳转到支付页面
                    window.location.href = result.data.pay_url;
                } else {
                    alert('创建订单失败: ' + result.msg);
                }
            } catch (error) {
                alert('网络错误,请重试');
            }
        }
    </script>
</body>
</html>

集成示例

ThinkPHP集成示例

控制器代码

php
<?php
namespace app\api\controller;

use think\Controller;
use think\facade\Log;

class Payment extends Controller
{
    // 创建订单
    public function createOrder()
    {
        try {
            $params = $this->request->post();
            
            // 参数验证
            $validate = new \app\api\validate\Order();
            if (!$validate->check($params)) {
                return json(['code' => 400, 'msg' => $validate->getError()]);
            }
            
            // 调用支付SDK
            $client = $this->getPaymentClient();
            $result = $client->order->create($params);
            
            return json($result);
            
        } catch (\Exception $e) {
            Log::error('创建订单失败: ' . $e->getMessage());
            return json(['code' => 500, 'msg' => '系统错误']);
        }
    }
    
    // 异步通知处理
    public function notify()
    {
        try {
            $data = $this->request->post();
            
            // 验证签名
            if (!$this->validateSignature($data)) {
                return response('fail', 400);
            }
            
            // 处理订单逻辑
            $order = \app\common\model\Order::where('order_no', $data['order_no'])->find();
            if ($order && $data['status'] === 'paid') {
                $order->status = 'paid';
                $order->pay_time = $data['pay_time'];
                $order->trade_no = $data['trade_no'];
                $order->save();
                
                // 触发支付成功事件
                event('OrderPaid', $order);
            }
            
            return response('success', 200);
            
        } catch (\Exception $e) {
            Log::error('异步通知处理失败: ' . $e->getMessage());
            return response('fail', 500);
        }
    }
    
    // 获取支付客户端
    private function getPaymentClient()
    {
        $config = [
            'merchant_id' => config('payment.merchant_id'),
            'api_key' => config('payment.api_key'),
            'private_key' => config('payment.private_key'),
            'public_key' => config('payment.public_key'),
            'environment' => config('app_debug') ? 'sandbox' : 'production'
        ];
        
        return new \QieJiao\Payment\Client($config);
    }
    
    // 验证签名
    private function validateSignature($data)
    {
        $signature = $data['signature'];
        unset($data['signature']);
        
        $client = $this->getPaymentClient();
        return $client->validateSignature($data, $signature);
    }
}

模型代码

php
<?php
namespace app\common\model;

use think\Model;

class Order extends Model
{
    // 订单状态
    const STATUS_PENDING = 'pending';    // 待支付
    const STATUS_PAID = 'paid';         // 已支付
    const STATUS_FAILED = 'failed';      // 支付失败
    const STATUS_EXPIRED = 'expired';    // 已过期
    
    // 支付方式
    const PAY_TYPE_WECHAT = 'wechat';    // 微信支付
    const PAY_TYPE_ALIPAY = 'alipay';    // 支付宝
    const PAY_TYPE_UNIONPAY = 'unionpay'; // 银联支付
    
    protected $autoWriteTimestamp = true;
    
    // 获取订单状态文本
    public function getStatusTextAttr($value, $data)
    {
        $status = $data['status'] ?? '';
        $statusMap = [
            self::STATUS_PENDING => '待支付',
            self::STATUS_PAID => '已支付',
            self::STATUS_FAILED => '支付失败',
            self::STATUS_EXPIRED => '已过期'
        ];
        
        return $statusMap[$status] ?? '未知状态';
    }
    
    // 检查订单是否可支付
    public function isPayable()
    {
        return $this->status === self::STATUS_PENDING && 
               $this->expire_time > time();
    }
}

测试数据

测试商户信息

  • 商户ID:TEST123456789
  • API密钥:test_api_key_123456
  • 测试金额:0.01元

测试订单流程

  1. 使用测试商户信息创建订单
  2. 选择任意支付方式
  3. 使用测试支付密码完成支付
  4. 查看订单状态更新

技术支持

技术支持方式

1. 在线文档

2. 技术支持渠道

  • 技术支持邮箱:support@qiejiao.com
  • 技术交流群:QQ群 123456789
  • 在线客服:工作日 9:00-18:00

3. 紧急联系方式

  • 紧急电话:400-xxx-xxxx
  • 值班手机:138-xxxx-xxxx
  • 微信支持:qiejiao-support

技术支持流程

问题提交

  1. 描述问题现象和重现步骤
  2. 提供相关日志和错误信息
  3. 说明环境和版本信息
  4. 提供联系方式

问题处理

  1. 初步响应:30分钟内确认问题接收
  2. 问题分析:2小时内给出初步分析结果
  3. 解决方案:根据问题复杂度提供解决方案
  4. 问题跟进:持续跟进直到问题解决

服务级别协议(SLA)

  • 一般问题:4小时内响应,24小时内解决
  • 重要问题:2小时内响应,8小时内解决
  • 紧急问题:15分钟内响应,2小时内解决

技术培训

培训内容

  • 基础培训:支付接口使用、SDK集成
  • 进阶培训:安全最佳实践、性能优化
  • 定制培训:根据业务需求定制培训内容

培训方式

  • 线上培训:视频会议、在线演示
  • 线下培训:现场技术交流
  • 文档培训:提供详细的培训材料

我们致力于为您提供最好的技术支持服务,确保您的支付系统稳定运行。

Released under the MIT License.