• php 实现stripe支付流程


    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;
    }
  • 相关阅读:
    jwt如何使用
    深入Linux下的GCC编译器:从入门到精通
    BlockingQueue
    阵列信号处理——LMS自适应波束形成算法
    【手把手带你学JavaSE】全方面带你了解异常
    解密Elasticsearch:深入探究这款搜索和分析引擎
    【DDIM】DENOISING DIFFUSION IMPLICIT MODELS【论文精读】【视频讲解】【公式推导】
    论文阅读 A Data-Driven Graph Generative Model for Temporal Interaction Networks
    ADS 使用调整器动态调参教程(Tuning)
    super关键字
  • 原文地址:https://blog.csdn.net/ahjxhy2010/article/details/132823368