Appearance
收款演示
演示环境
我们提供完整的演示环境,帮助您快速了解茄椒支付的功能和使用方式。
演示地址
- USDT收银台:https://demo.qiejiao.com
- CNY收银台:https://demo.qiejiao.com/admin
技术演示
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. 技术支持渠道
- 技术支持邮箱:support@qiejiao.com
- 技术交流群:QQ群 123456789
- 在线客服:工作日 9:00-18:00
3. 紧急联系方式
- 紧急电话:400-xxx-xxxx
- 值班手机:138-xxxx-xxxx
- 微信支持:qiejiao-support
技术支持流程
问题提交
- 描述问题现象和重现步骤
- 提供相关日志和错误信息
- 说明环境和版本信息
- 提供联系方式
问题处理
- 初步响应:30分钟内确认问题接收
- 问题分析:2小时内给出初步分析结果
- 解决方案:根据问题复杂度提供解决方案
- 问题跟进:持续跟进直到问题解决
服务级别协议(SLA)
- 一般问题:4小时内响应,24小时内解决
- 重要问题:2小时内响应,8小时内解决
- 紧急问题:15分钟内响应,2小时内解决
技术培训
培训内容
- 基础培训:支付接口使用、SDK集成
- 进阶培训:安全最佳实践、性能优化
- 定制培训:根据业务需求定制培训内容
培训方式
- 线上培训:视频会议、在线演示
- 线下培训:现场技术交流
- 文档培训:提供详细的培训材料
我们致力于为您提供最好的技术支持服务,确保您的支付系统稳定运行。