简体   繁体   English

Paypal REST Api实现

[英]Paypal REST Api implmentation

I am new to curl so I am using code found on the Paypal Developer blog and I am having a hard time getting it to work for me. 我是个新手,所以我使用在Paypal开发人员博客上找到的代码,因此很难为我工作。 Here is the code I am using 这是我正在使用的代码

class paypal {
    private $access_token;
    private $token_type;

    /**
    * Constructor
    *
    * Handles oauth 2 bearer token fetch
    * @link https://developer.paypal.com/webapps/developer/docs/api/#authentication--headers
    */
    public function __construct(){
        $postvals = "grant_type=client_credentials";
        $uri = PAYMENT_URI . "v1/oauth2/token";

        $auth_response = self::curl($uri, 'POST', $postvals, true);
        $this->access_token = $auth_response['body']->access_token;
        $this->token_type = $auth_response['body']->token_type;
    }

    /**
    * cURL
    *
    * Handles GET / POST requests for auth requests
    * @link http://php.net/manual/en/book.curl.php
    */
    private function curl($url, $method = 'GET', $postvals = null, $auth = false){
        $ch = curl_init($url);

        //if we are sending request to obtain bearer token
        if ($auth){
            $headers = array("Accept: application/json", "Accept-Language: en_US");
            curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
            curl_setopt($ch, CURLOPT_USERPWD, CLIENT_ID . ":" .CLIENT_SECRET);
            curl_setopt($ch, CURLOPT_SSLVERSION, 3);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        //if we are sending request with the bearer token for protected resources
        } else {
            $headers = array("Content-Type:application/json", "Authorization:{$this->token_type} {$this->access_token}");
        }

        $options = array(
            CURLOPT_HEADER => true,
            CURLINFO_HEADER_OUT => true,
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_VERBOSE => true,
            CURLOPT_TIMEOUT => 10
        );

        if ($method == 'POST'){
            $options[CURLOPT_POSTFIELDS] = $postvals;
            $options[CURLOPT_CUSTOMREQUEST] = $method;
        }

        curl_setopt_array($ch, $options);

        $response = curl_exec($ch);
        $header = substr($response, 0, curl_getinfo($ch,CURLINFO_HEADER_SIZE));
        $body = json_decode(substr($response, curl_getinfo($ch,CURLINFO_HEADER_SIZE)));
        curl_close($ch);

        return array('header' => $header, 'body' => $body);
    }

    // Function for Processing Payment
    function process_payment($request) {
        $postvals = $request;
        $uri = PAYMENT_URI . "v1/payments/payment";
        return self::curl($uri, 'POST', $postvals);
    }
}

if (isset($_SESSION['payment_type']) && ($_SESSION['payment_type'] == 'paypal')) { // User has chosen to pay with Paypal.


    // Retrive Shopping cart contents
    $r = mysqli_query($dbc, "CALL get_shopping_cart_contents('$uid')");

    $request = array(
        'intent' => 'sale',
        'redirect_urls' => array(
            'return_url' =>'http://store.example.com/final',
            'cancel_url' =>'http://store.example.com/payment'
        ),
        'payer' => array(
            'payment_method' =>'paypal'
        ),
        'transactions' => array(
            'amount' => array(
                'total' =>''.number_format($order_total,2).'',
                'currency' =>'USD',
                'details' => array(
                    'subtotal' =>''.number_format($subtotal,2).'',
                    'shipping' =>''.number_format($shipping,2).''
                ),
                'item_list' => array(

                )
            ),
            'description' =>'Mike and Maureen Photography - Order ID #'.$order_id.''
        )
    );

    while ($items = mysqli_fetch_array($r, MYSQLI_ASSOC)) {

        $newitems = array(
            'quantity' =>''.$items['quantity'].'',
            'name' =>''.$items['name'].'',
            'price' =>''.get_price($items['price'],$items['sales_price']).'',
            'currency' =>'USD'
        );
        $request['transactions']['amount']['item_list']['items'][] = $newitems;  
    }

    $request = json_encode($request);

    process_payment($request);
}

I am good with php but this whole class, public/private stuff is throwing me off. 我对php很好,但是在整个课堂上,公共/私有的东西使我失望。 Can I use this code without that or will it open me up to trouble? 我可以在没有该代码的情况下使用该代码,否则会给我带来麻烦吗? How do I run the process_payment function without it throwing an error. 如何运行process_payment函数而不会引发错误。 I am getting "Fatal error: Call to undefined function process_payment()" 我收到“致命错误:调用未定义的函数process_payment()”

Didnt I just define the function in the paypal class? 我只是在贝宝类中定义了功能吗? I have read through the documentation on paypal and I cant get a grasp on what I am doing wrong. 我已经阅读了Paypal上的文档,但无法了解自己在做什么错。 Any help would be great. 任何帮助都会很棒。

The function process_payment() is part of the paypal class. 函数process_payment()是paypal类的一部分。 To call it, you will have to do one of the ways outlined here: https://stackoverflow.com/a/4216347/1715048 要调用它,您将必须执行此处概述的方法之一: https : //stackoverflow.com/a/4216347/1715048

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM