Stripe接入教程

一、更新dujiaoka的接入代码

dujiaoka原有的stripe代码太老了,需要更新,有人在github上更新相关分支代码
更新代码看这里
其中新增了stripecheckout的执行函数,路由表,以及配置页面的数据库命令

二、代码调整

新增的stripecheckout.php中,增加了一个汇率转换的库和函数,但是这个库已经好多年没有维护了,它调用的接口已经从原来的免费,变更成了需要api接入,而且免费的接口不支持https接入,所以如下代码要做修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

public function gateway(string $payway, string $orderSN)
{
try{
$this->loadGateWay($orderSN, $payway);
\Stripe\Stripe::setApiKey($this->payGateway->merchant_id);
$price = Currency::convert()
->from('CNY')
->to('HKD')
->amount($this->order->actual_price)
->round(2)
->get();
//注释如下代码
//$TotalAmount = $price * 100;
//增加如下代码直接将价格传入进来
$TotalAmount = $this->order->actual_price * 100;
$data = [
'success_url' => url('detail-order-sn', ['orderSN' => $this->order->order_sn]),
'cancel_url' => url('/'),
'client_reference_id' => $this->order->order_sn,
'line_items' => [[
'price_data' => [
//这里可以把HKD改成CNY随意了
'currency' => 'HKD',
'product_data' => [
'name' => $this->order->order_sn
],
'unit_amount' => $TotalAmount
],
'quantity' => 1
]],
'mode' => 'payment',
'customer_email' => $this->order->email
];
$session = Session::create($data);
return redirect()->away($session->url);//可以使用自定义域名
}catch (\Exception $e) {
return $this->err(__('dujiaoka.prompt.abnormal_payment_channel') . $e->getMessage());
}
}

三、设置Webhook

需要在stripe设置webhook,用于调用付款后回调独角卡的接口,这个接口如下
https://你的服务器域名/stripecheckout/webhook
将这个接口地址新增到stripe中,并增加checkout相关的事件
图片

完成后,这个webhook就可以开始侦听支付事件了,需要点击密钥签名获得wh开头的密钥
图片

四、设置dujiaoka配置

打开你独角卡网站的支付配置,找到stripecheckout,按照如下图填入
图片

五、开始测试

建议对接完以后,开启stripe的测试模式先进行测试,确保支付流程没有问题。我这边就遇到了支付宝支付以后,没有给用户发邮件的问题。独角卡这个系统实在是太老了

graph LR
A[发起支付] -->B(调用stripe支付页面)
    B --> C{支付是否成功}
    C -->|支付成果| D[event.checkout.success]
    C -->|支付失败| E[event.checkout.failed]
    D --> F(调用webhook接口)
    E --> F(调用webhook接口)
    G[stripe交互流程图]