PayPal PHP 沙盒标头身份验证


PayPal PHP Sandbox Header Auth?

我目前在PayPal退款测试中遇到了一些问题。

我通过这样做来获得帐户的令牌:

 public function __construct(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/oauth2/token");
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERPWD, $this->clientID.":".$this->secret);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
    $result = curl_exec($ch);
    $json = json_decode($result);
    $this->auth = $json->access_token;
   // echo "Auth?" . $this->auth;
 }

当我尝试退还销售时,无论如何它只会返回 1。交易 ID 是正确的,但就像它没有设置正确的标题 - 有人可以帮助我吗?

 public function RefundSale($transaction_id){
     $url = self::getPath() . "/payments/sale/".$transaction_id."/refund";
     echo "URL:" . $url;
     self::rest($url);
 }
 public function rest($url,$data=""){
    $ch = curl_init();
    if ( !empty($data)): $data=json_encode($data); endif; //Array to json?
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    if ( !empty($data)): curl_setopt($ch, CURLOPT_POSTFIELDS, $data); endif;
     curl_setopt($ch, CURLOPT_USERPWD, $this->clientID . ":" . $this->secret);
    $result = curl_exec($ch);
    var_dump($result);
 }

几件事

  1. 必须设置 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) 才能检索 curl 响应。否则,您只会收到真/假成功/错误消息。
  2. 修复此问题后,代码片段会给出 400(错误请求)http 响应代码。这可以通过无条件调用curl_setopt($ch、CURLOPT_POSTFIELDS$data)来纠正。即使您没有要发送的数据,最终也会发送空有效负载。
  3. 最后一个问题是对呼叫进行身份验证的方式。获得身份验证令牌后,通过发送"身份验证:持有者"标头对 API 调用进行身份验证。