当前位置: 首页 > 知识库问答 >
问题:

创建客户功能

柯乐池
2023-03-14

我想在我当前的预订表上实现创建客户和保存卡的功能。目前它只登记付款,不登记客户。我已经尝试过实现这一点https://stripe.com/docs/saving-cards但是运气不好。

以下是我的插件支付集成:

<?php
  
class CHBSPaymentStripe
{
    function __construct()
    {
 
    }
   
    function createPaymentForm($postId,$bookingId,$bookingTitle,$amount,$publishableKey)
    {
        $html=
        '
           <form action="'.get_the_permalink($postId).'?bookingId='.(int)$bookingId.'" method="POST" name="chbs-form-stripe" >
               <script
                   src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                    data-key="'.esc_attr($publishableKey).'"
                    data-allow-remember-me="true"
                    data-amount="'.esc_attr($amount*100).'"
                    data-name="'.esc_attr($bookingTitle).'"
                    data-description="'.esc_attr__('New booking','chauffeur-booking-system').'"
                    data-currency="'.esc_attr(CHBSOption::getOption('currency')).'"
                    data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
                    data-locale="auto">
                </script>
                <button type="submit" id="submitMeBtn" formtarget="_blank" style="display:none !important;"></button>
           </form>
        ';
       
        return($html);
    }
   
    function createCharge($stripeToken,$bookingId)
    {
        $Booking=new CHBSBooking();
        $BookingForm=new CHBSBookingForm();
       
        $booking=$Booking->getBooking($bookingId);
       
        if($booking===false) return(false);
       
        if($booking['meta']['payment_id']!=2) return(false);
       
        $bookingFormId=$booking['meta']['booking_form_id'];
       
        $bookingForm=$BookingForm->getDictionary(array('booking_form_id'=>$booking['meta']['booking_form_id']));
        if(count($bookingForm)!=1) return(false);
       
        $bookingBilling=$Booking->createBilling($bookingId);
       
        $data=array
        (
            'source'                                                            =>  $stripeToken,
            'description'                                                       =>  $booking['post']->post_title,
            'amount'                                                            =>  $bookingBilling['summary']['pay']*100,
            'currency'                                                          =>  $booking['meta']['currency_id']
        );
           
        $string=http_build_query($data);
       
        $ch=curl_init();
        curl_setopt($ch,CURLOPT_URL,'https://api.stripe.com/v1/charges');
        curl_setopt($ch,CURLOPT_USERPWD,$bookingForm[$bookingFormId]['meta']['payment_stripe_api_key_secret']);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$string);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
        $result=curl_exec($ch);
           
        if($result)
        {
            $result=json_decode($result);
            if(property_exists($result,'error')) return(false);
 
            $meta=CHBSPostMeta::getPostMeta($bookingId);
               
            $paymentData=array
            (
                'txn_id'                                                        =>  $result->id,
                'payment_type'                                                  =>  $result->source->object,
                'payment_date'                                                  =>  date('Y-m-d H:i:s',$result->created),
                'payment_status'                                                =>  $result->status,
                'mc_gross'                                                      =>  $result->amount/100,
                'mc_currency'                                                   =>  $result->currency        
            );
       
            if(!((array_key_exists('payment_data',$meta)) && (is_array($meta['payment_data']))))
                $meta['payment_data']=array();
       
            array_push($meta['payment_data'],$paymentData);
       
            CHBSPostMeta::updatePostMeta($bookingId,'payment_data',$meta['payment_data']);
           
            return(true);
        }
    }
   
    function redirect()
    {
        $bookingId=CHBSHelper::getGetValue('bookingId',false);
        $stripeToken=CHBSHelper::getPostValue('stripeToken',false);
       
        if($stripeToken!==null)
        {
            $PaymentStripe=new CHBSPaymentStripe();
            $PaymentStripe->createCharge($stripeToken,$bookingId);
           
            $Booking=new CHBSBooking();
            $BookingForm=new CHBSBookingForm();
           
            $Validation=new CHBSValidation();
           
            $booking=$Booking->getBooking($bookingId);
       
            $bookingFormId=$booking['meta']['booking_form_id'];
            if(($dictionary=$BookingForm->getDictionary(array('booking_fomr_id'=>$bookingFormId)))===false) return(false);
            if(count($dictionary)!=1) return(false);
       
            if($Validation->isNotEmpty($dictionary[$bookingFormId]['meta']['payment_stripe_redirect_url_address']))
            {
                wp_redirect($dictionary[$bookingFormId]['meta']['payment_stripe_redirect_url_address']);
                exit();
            }
        }          
    }
}

共有1个答案

罗烨霖
2023-03-14

我在代码中没有看到任何使用客户endpoint的行。

在您的情况下,您应该先创建一个客户,为该客户存储卡片详细信息,然后向客户收费。

逐条查看这个应用编程接口库来创建一个客户。我建议您为PHP使用这个Stripe库。我正在使用Python的Stripe,这个库有助于避免许多错误。

 类似资料:
  • 创建客户端有两种方式,一种是直接使用特化的构造器函数,另一种是使用工厂构造器函数。 第一种方式返回的是具体的客户端结构体指针对象,第二种方式返回的是客户端接口对象。 使用特化的构造器函数创建客户端 特化的构造器函数有下面几个: func NewHTTPClient(uri ...string) (client *HTTPClient) func NewTCPClient(uri ...string

  • 问题内容: 因此,我正在查看文档,并且完全没有使用任何方法的示例。我正在研究使用socks5。该函数的外观如下: 现在一切都说得通了,除了我对哪个是类型感到困惑,函数本身返回了一个。其他一切都有意义,只是前进就把我赶走了。我如何设置我的客户使用socks5 Dialer? 问题答案: 因此,只要有兴趣在此处设置socks5客户的人,我都可以找到我问题的答案:

  • 我正在尝试连接到MBean服务器。我需要编写JMX客户端应用程序。这是用于客户端应用程序的代码。但我有一个例外 检索RMIServer存根失败:javax.naming.ServiceUnavailableException[根异常为java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常为: 谁能帮我把这个修好。 我使用以下参数运行了这段代码。 dcom.s

  • 关于Netflix Eureka Service Registry,我已经成功地使用Tomcat8.0.35设置了Eureka Netflix服务器。我还得到了基本的示例服务&客户端来进行相互通信。我对Eureka还是个新手,管理层决定将Eureka与Spring一起使用,因为几个新的应用程序都是围绕Spring框架编写的。 null 我希望为大多数非AWS云实例配置服务和客户端。Eureka W

  • 我是java和web服务以及的新手。我最近使用一些教程创建了一个web服务。当我第一次学习eclipse教程时,让我创建一个客户机。但是当我尝试创建一个新项目和一个新的web服务客户机时,它会给出。具体如下所示: im使用Axis2-1.6.1,它说java遵从性级别是6,我搜索了一下,但是找不到解决这个问题的相关方案。感谢任何帮助。

  • 我使用wsdl2java生成代码,并成功创建web服务客户端来调用服务。但是当我把我的程序放在服务器机器上时,程序不能创建网络服务client.if机器可以访问互联网,一切正常。所以我认为这个例外是因为cxf不能访问http://schemas.xmlsoap.org/soap/encoding/ stacktrace: 那么你能告诉我如何解决这个问题吗,谢谢你的帮助