我正在上课,用paypal付款。
通过函数getToken()
获取令牌有效,并且它会发出良好的响应(根据文档)。
但是,当我使用该令牌建立与令牌所用的sendAPICall()
相同的付款时;它只返回一个空字符串(根据var_dump())。
如果我从api-information中复制确切的curl命令并粘贴beare-token;有用。所以我的API调用出了问题......
显然我错过了一些东西。有人能指出我的错误吗?
获取Bearer-token的函数:
public function getToken(){
$headers = array(
"Accept-Language" => 'en_US',
"Accept" => "application/json"
);
$t = json_decode($this->sendAPICall('grant_type=client_credentials', '/oauth2/token', $headers, true));
if($t->error){
$this->error = $t->error_description;
$this->token = NULL;
return false;
}else{
$this->token = $t;
return true;
}
}
检查后应该付款的功能有可用的代币。
public function makePayment(){
$this->getToken();
if($this->error){
return false;
}else{
$d = '{"intent":"sale",
"redirect_urls":{
"return_url":"'.$this->config['returnURL'].'",
"cancel_url":"'.$this->config['cancelURL'].'"
},
"payer":{
"payment_method":"paypal"
},
"transactions":[
{
"amount":{
"total":"'.$this->amount.'",
"currency":"'.$this->config['currency'].'"
},
"description":"'.$this->description.'"
}
]
}';
$headers = array( "Authorization" => $this->token->token_type . ' ' . $this->token->access_token,
"Content-type" => "application/json"
);
return $this->sendAPICall(urlencode($d), '/payments/payment', $headers, false);
}
}
当然还有与paypal API的连接,我使用$ auth boolean来区分发送userpwd或使用令牌:
private function sendAPICall($data, $url, $headers, $auth=true){
$ch = curl_init();
$options = array( CURLOPT_URL => $this->config['endpoint'].$url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true
);
if($auth){
$options[CURLOPT_USERPWD] = $this->config['client_id'].':'.$this->config['client_secret'];
};
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
return curl_exec($ch);
}
答案 0 :(得分:0)
此代码段看起来不正确地传递HTTP标头。 CURLOPT_HTTPHEADER采用一个具有形式" headername:value"的值的一维数组。你需要
$ headers = array( "授权:" 。 $ this-> token-> token_type。 ' ' 。 $这 - >令牌的>的access_token, "内容类型:application / json" );
还要考虑