获得令牌工作,但不支付

时间:2013-08-20 15:53:41

标签: paypal

我正在上课,用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);



}

1 个答案:

答案 0 :(得分:0)

此代码段看起来不正确地传递HTTP标头。 CURLOPT_HTTPHEADER采用一个具有形式" headername:value"的值的一维数组。你需要

$ headers = array(    "授权:" 。 $ this-> token-> token_type。 ' ' 。 $这 - >令牌的>的access_token,    "内容类型:application / json" );

还要考虑

  1. 检查curl_errno($ ch)/ curl_error($ ch)和HTTP响应代码(curl_getinfo($ ch,CURLINFO_HTTP_CODE))以查看呼叫是否成功。
  2. 在调用sendAPICall()时,将请求数据创建为关联数组并使用json_encode($ data)。这比手动操作JSON字符串容易得多。