我是新來的curl,所以我使用Paypal開發人員博客上發現的代碼,我很難讓它爲我工作。這裏是我使用的代碼Paypal REST API implmentation
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);
}
我很擅長php,但是這整個班,公共/私人的東西都把我扔掉了。我可以在沒有這個的情況下使用這些代碼,還是會讓我麻煩?如何在不拋出錯誤的情況下運行process_payment函數。我得到「致命的錯誤:調用未定義的函數process_payment()」
我剛纔定義的功能在貝寶類?我已閱讀了關於貝寶的文檔,我無法弄清楚我做錯了什麼。任何幫助都會很棒。
您無法調用'process_payment()'。您必須使用「paypal」類的實例或使該函數成爲靜態的,以便可以從課程外部調用該函數。 –
好吧我現在想出了這一部分我得到了一個錯誤,從響應說「傳入的JSON請求不映射到API請求」有沒有辦法我可以檢查,或者我應該在這裏發佈我的代碼?我用$ paypal = new PayPal(); \t \t $ result = $ paypal-> process_payment($ request); – McCoy