[update] 新增credit card跳转至checkout页面付款

This commit is contained in:
LinusX 2024-07-02 19:02:29 +08:00
parent f0c620cbc2
commit acb40cc1f9
No known key found for this signature in database

View File

@ -37,7 +37,7 @@ class StripeALLInOne {
],
'payment_method' => [
'label' => '支付方式',
'description' => '请输入alipay或者wechat_pay',
'description' => '请输入alipay, wechat_pay, cards',
'type' => 'input',
]
];
@ -50,9 +50,12 @@ class StripeALLInOne {
if (!$exchange) {
throw new ApiException('Currency conversion has timed out, please try again later', 500);
}
//jump url
$jumpUrl = null;
$actionType = 0;
$stripe = new \Stripe\StripeClient($this->config['stripe_sk_live']);
if ($this->config['payment_method'] != "cards"){
$stripePaymentMethod = $stripe->paymentMethods->create([
'type' => $this->config['payment_method'],
]);
@ -85,9 +88,7 @@ class StripeALLInOne {
$stripeIntents = $stripe->paymentIntents->create($params);
$nextAction = null;
//jump url
$jumpUrl = null;
$actionType = 0;
if (!$stripeIntents['next_action']) {
throw new ApiException(__('Payment gateway request failed'));
}else {
@ -110,6 +111,30 @@ class StripeALLInOne {
throw new ApiException('unable get WeChat Pay redirect url', 500);
}
}
} else {
$creditCheckOut = $stripe->checkout->sessions->create([
'success_url' => $order['return_url'],
'client_reference_id' => $order['trade_no'],
'payment_method_types' => ['card'],
'line_items' => [
[
'price_data' => [
'currency' => $currency,
'unit_amount' => floor($order['total_amount'] * $exchange),
'product_data' => [
'name' => 'sub-' . $order['user_id'] . '-' . substr($order['trade_no'], -8),
'description' => $this->config['description'],
]
],
'quantity' => 1,
],
],
'mode' => 'payment',
]);
$jumpUrl = $creditCheckOut['url'];
$actionType = 1;
}
return [
'type' => $actionType,
'data' => $jumpUrl
@ -133,7 +158,6 @@ class StripeALLInOne {
} catch (\UnexpectedValueException $e){
throw new ApiException('Error parsing payload', 400);
}
catch (\Stripe\Exception\SignatureVerificationException $e) {
throw new ApiException('signature not match', 400);
@ -153,6 +177,22 @@ class StripeALLInOne {
];
}
break;
case 'checkout.session.completed':
$object = $event->data->object;
if ($object->payment_status === 'paid') {
return [
'trade_no' => $object->client_reference_id,
'callback_no' => $object->payment_intent
];
}
break;
case 'checkout.session.async_payment_succeeded':
$object = $event->data->object;
return [
'trade_no' => $object->client_reference_id,
'callback_no' => $object->payment_intent
];
break;
default:
throw new ApiException('event is not support');
}