2017-05-17 148 views
2

我在使用vhost - > test.it/paypal在我的apache服务器上进行php演示测试,测试paypal集成。 我使用Express Checkout +服务器端REST(cURL)。 我的JS添加PayPal按钮是:Paypal Express checkout + php cURL在沙箱上执行付款不显示付款通知

<script> 
 

 
     var CREATE_PAYMENT_URL = 'http://test.it/paypal/create-payment.php'; 
 
     var EXECUTE_PAYMENT_URL = 'http://test.it/paypal/execute-payment.php'; 
 

 
     paypal.Button.render({ 
 

 
      env: 'sandbox', // Or 'production', 
 

 
      commit: true, // Show a 'Pay Now' button 
 

 
      locale: 'it_IT', 
 

 
      style: { 
 
       size: 'small', 
 
       color: 'blue', 
 
       shape: 'pill', 
 
       label: 'checkout' 
 
      }, 
 

 
      commit: true, // Show a 'Pay Now' button 
 

 
      payment: function() { 
 

 
       // Make a call to the merchant server to set up the payment 
 

 
       return paypal.request.post(CREATE_PAYMENT_URL).then(function(res) { 
 
        //return res.payToken; 
 
        console.log(res); 
 
        return res.paymentID; 
 
       }); 
 
      }, 
 

 
     // Wait for the payment to be authorized by the customer 
 

 
     onAuthorize: function(data) { 
 
      //alert(data.payerID); 
 
      return paypal.request.post(EXECUTE_PAYMENT_URL, { 
 
       paymentID: data.paymentID, 
 
       payerID: data.payerID 
 
      }).then(function(res) { 
 
       /* Go to a success page */ 
 
       console.log('SUCCESS!!!!!!!!!'); 
 
       console.log(res); 
 
       // The payment is complete! 
 
       // You can now show a confirmation message to the customer 
 
       alert('pagamento completato'); 
 
      }).catch(function (err) { 
 
       /* Go to an error page */ 
 
       console.log('ERROR!!!!!!!!!'); 
 
       console.log(data); 
 
       console.log(err); 
 
      }); 
 
     } 
 

 
     }, '#paypal-button'); 
 
    </script>

的创建,payment.php如下:

<?php 
 
session_start(); 
 
include 'config.php'; 
 

 
// autenticazione per ottenere user token 
 
$url_wbs="https://api.sandbox.paypal.com/v1/oauth2/token"; 
 

 

 
$ch = curl_init(); 
 
$clientId = "Aeet9T-pG4XQU-GnDL2uSrkJQ4_qaxgAu9XtVTP6qeuXDGBOnHf2TiVF2Qv5OurFmSo9dPkwVk-x0J3x"; 
 
$secret = "EGQguUgHcN4TLjAEAXb4Jo8qoTQCvC3o_54FL2r2wQUtjbGoRoWeRlDyNNhU3HO8lpdexzNsW-ePb2qe"; 
 
// id web experience profile 
 
$experience_profile_id="XP-V52K-SKNH-FK7Y-HLYQ"; 
 

 
curl_setopt($ch, CURLOPT_URL, $url_wbs); 
 
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, $clientId.":".$secret); 
 
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials"); 
 

 
$result = curl_exec($ch); 
 
curl_close($ch); 
 
if(empty($result))die("Error: No response."); 
 
else 
 
{ 
 
    $obj=json_decode($result); 
 

 
    //var_dump($obj->access_token); 
 
    $_SESSION['token']=$obj->access_token; 
 

 
    // imposto il web profile ottenendone l'id 
 
    $header_rest_call[]='Authorization: Bearer '.$obj->access_token; 
 

 

 
    $json_body='{ 
 
    "intent": "sale", 
 
    "experience_profile_id":"'.$experience_profile_id.'", 
 
    "redirect_urls": 
 
    { 
 
    "return_url": "http://test.it/paypal/checkout.php", 
 
    "cancel_url": "http://test.it/paypal/pagamento-cancellato.php" 
 
    }, 
 
    "payer": 
 
    { 
 
    "payment_method": "paypal" 
 
    }, 
 
    "transactions": [ 
 
    { 
 
    "amount": 
 
    { 
 
     "total": "4.00", 
 
     "currency": "EUR", 
 
     "details": 
 
     { 
 
     "subtotal": "2.00", 
 
     "shipping": "1.00", 
 
     "tax": "2.00", 
 
     "shipping_discount": "-1.00" 
 
     } 
 
    }, 
 
    "item_list": 
 
    { 
 
     "items": [ 
 
     { 
 
     "quantity": "1", 
 
     "name": "item 1", 
 
     "price": "1", 
 
     "currency": "EUR", 
 
     "description": "item 1 description", 
 
     "tax": "1" 
 
     }, 
 
     { 
 
     "quantity": "1", 
 
     "name": "item 2", 
 
     "price": "1", 
 
     "currency": "EUR", 
 
     "description": "item 2 description", 
 
     "tax": "1" 
 
     }] 
 
    }, 
 
    "description": "The payment transaction description.", 
 
    "invoice_number": "merchant invoice", 
 
    "custom": "merchant custom data" 
 
    }] 
 
}'; 
 

 
    $obj_payment=get_obj_json($payment_creation_url,$header_rest_call,$json_body,'POST'); 
 

 
    //var_dump($obj_payment->id); 
 
    $response=array(
 
    'paymentID'=>$obj_payment->id 
 
    ); 
 

 
    echo json_encode($response); 
 
} 
 
?>

的execu TE-payment.php如下:

<?php 
 
session_start(); 
 
include 'config.php'; 
 

 

 
    // imposto il web profile ottenendone l'id 
 
    $header_rest_call[]='Authorization: Bearer '.$_SESSION['token']; 
 

 
    // indirizzo wbs per pagamento 
 
    $url_payment="https://api.sandbox.paypal.com/v1/payments/payment/".$_POST['paymentID']."/execute/"; 
 

 
    $json_body='{ 
 
    "payer_id": "'.$_POST['payerID'].'"; 
 
    }'; 
 

 
    $obj_payment=get_obj_json($url_payment,$header_rest_call,$json_body,'POST'); 
 

 
    echo json_encode($obj_payment); 
 

 

 
?>

当我点击PayPal按钮PayPal的登录表单正确地购买数据出现时,我输入凭据,最后我点击“现在支付” 按钮。看来支付是成功的..但在沙箱帐户 - >活动 - >没有过渡/付款的痕迹..?

+0

那些是你真正的'clientId'和'secret'我不会?' t发布那些... –

+0

采取赶时间..现在我删除了应用程序。谢谢 –

回答

0

问题出在支付/执行请求的格式错误的json。

$json_body='{ 
"payer_id": "'.$_POST['payerID'].'"; 

}';

有我后误入一个分号 - > $ _ POST [ 'payerID'] '!”

现在,它的工作原理

+0

我想要在我的网站上集成相同,你可以告诉我在config.php中有什么,我收到错误未捕获的错误:调用未定义的函数get_obj_json() –