1.申请账号获取密钥key
2.申请创建商品,创建价格,创建支付,
//创建商品 public function create_product(){ $_key = self::STRIPE_KEY; $stripe = new \Stripe\StripeClient($_key); $arr = $stripe->products->create([ 'name' => $goods_name, ]); // print_r($arr->id);die; $this->create_price($arr->id,$order_id,$is_source); }
//创建价格 public function create_price($product_id,$order_id,$is_source){ //获取订单对应的商品价格 $goods_price = \db('order')->where('id',$order_id)->value('pay_money'); $_key = self::STRIPE_KEY; $stripe = new \Stripe\StripeClient($_key); $price_arr = $stripe->prices->create([ 'unit_amount' => $goods_price*100, //'unit_amount' => 1*100, 'currency' => 'usd', 'tax_behavior' => 'exclusive', //'recurring' => ['interval' => 'day'], 'product' => $product_id, ]); //print_r($price_arr->id);die; $this->actionStripe($price_arr->id,$order_id,$is_source); }
/** * 创建stripe支付 */ public function actionStripe($price_id,$order_id,$is_source) { $_key = self::STRIPE_KEY; $domain = $this->request->domain(); //如果是AI订阅和AI作品打样的话 if ($is_source == 8 || $is_source == 9){ $cancel_url = 'https://ai.jewelryhunt.net/index/aimobile/mobile_list'; $success_url = 'https://ai.jewelryhunt.net/index/aimobile/order'; }else{ $cancel_url = $domain.'/index/user/orders'; $success_url = $domain . '/index/stripepay/success_info'; } // stripe 生成订单 \Stripe\Stripe::setApiKey($_key); $checkout_session = \Stripe\Checkout\Session::create([ 'line_items' => [[ 'price' => $price_id, // 产品id 'quantity' => 1, ]], 'mode' => 'payment', 'success_url' => $success_url, 'cancel_url' => $cancel_url, 'automatic_tax' => [ 'enabled' => true, ], 'metadata' => [ 'order_id' => $order_id, ], ]); header("HTTP/1.1 303 See Other"); header("Location: " . $checkout_session->url);
}
4.配置回调事件
5.
/** * stripe支付回调 */ public function actionNotify() { \think\Log::record('支付进来了', 'info'); $_key = self::STRIPE_KEY; \Stripe\Stripe::setApiKey($_key); $payload = @file_get_contents('php://input'); $event = null; try { $event = \Stripe\Event::constructFrom( json_decode($payload, true) ); } catch(\UnexpectedValueException $e) { // Invalid payload http_response_code(400); exit(); } // Handle the event \think\Log::record('event12333333' . var_export($event->type, true), 'info'); switch ($event->type) { case 'checkout.session.completed': $succeeded = $event->data->object; $content = "=========".date('Y-m-d H:i:s',time())."==========\r\n"; $content .= json_encode($succeeded); \think\Log::record('content=======' . var_export($content, true), 'info'); $token = input('token', ''); if ($succeeded->status == 'complete') { $order_id = $succeeded->metadata->order_id; $pay_type = input('pay_type', 1); } break; case 'checkout.session.async_payment_failed': \think\Log::record('pay is failed', 'info'); break; default: echo 'Received unknown event type ' . $event->type; break; } \think\Log::record('done', 'info'); return true; }