条纹创建客户功能

时间:2018-10-23 20:10:22

标签: php stripe-payments

您好,我想实现条纹创建客户并将卡保存在当前的预订表格中。目前,它注册付款,但不注册客户。我尝试实现此https://stripe.com/docs/saving-cards,但没有运气。 如果有人可以帮助我,那将是非常棒的。 谢谢你。

这是我的插件付款集成:

<?php

/ ************************************************** ************************************ / / ***************************************************** ********************************* /

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 个答案:

答案 0 :(得分:0)

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

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

按条带签出this API库以创建客户。我建议您将这个Stripe库用于PHP。我正在将Stripe与Python结合使用,该库有助于避免许多错误。