function paiement_echec()
{
echo "payment cancelled by the user";
}
function paiement_succes()
{
// Obtain the token from PayPal.
if(!array_key_exists('token', $_REQUEST))
exit('Token is not received.');
// Set request-specific fields.
$token = urlencode(htmlspecialchars($_REQUEST['token']));
// Add request-specific fields to the request string.
$nvpStr = "&TOKEN=$token";
// Execute the API operation; see the PPHttpPost function above.
$httpParsedResponseAr = $this->PPHttpPost('GetExpressCheckoutDetails', $nvpStr);
if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"]))
{
//print_r($httpParsedResponseAr);
$payerID = urlencode($httpParsedResponseAr["PAYERID"]);
//$token = urlencode("token");
$paymentType = urlencode('Sale'); // or 'Sale' or 'Order'
$paymentAmount = urlencode("4.39");
$currencyID = urlencode("USD"); // or other currency code ('GBP', 'EUR', 'JPY', 'CAD', 'AUD')
// Add request-specific fields to the request string.
$nvpStr = "&TOKEN=$token&PAYERID=$payerID&PAYMENTACTION=$paymentType&AMT=$paymentAmount&CURRENCYCODE=$currencyID";
$httpParsedResponseAr = $this->PPHttpPost('DoExpressCheckoutPayment', $nvpStr);
if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"]))
{
$this->load->model('payment_model');
$this->payment_model->paypal_payment();
$msg = "<label>Thank you !! your payment is successfully done</label>
<a href='".base_url()."envoie_de_photos/envoyer_vos_photos"."'>Go To Photo Uploading</a>";
echo $msg;
}
else
{
exit('GetExpressCheckoutDetails failed: ' . print_r($httpParsedResponseAr, true));
//echo "Payment failed for unknown reason";
}
}
else
{
//exit('GetExpressCheckoutDetails failed: ' . print_r($httpParsedResponseAr, true));
echo "Payment failed for unknown reason";
}
}
function pay_by_paypal()
{
$environment = 'sandbox';
$_SESSION['item_name']=$this->input->post('item_name');
$_SESSION['amount']=$this->input->post('amount');
$_SESSION['currency_code']=$this->input->post('currency_code');
$_SESSION['no_of_photo']=$this->input->post('no_of_photo');
$qty=urlencode("1");
$product_name=urldecode($_SESSION['item_name']);
$price=urlencode($_SESSION['amount']);
//$currencyID = urlencode($_SESSION['currency_code']);
$currencyID = urlencode("USD");
// or other currency code ('GBP', 'EUR', 'JPY', 'CAD', 'AUD')
$paymentType = urlencode('Order');
$nvpStr="";
$returnURL = (base_url()."paiement/paiement_succes");
$cancelURL = (base_url()."paiement/paiement_echec");
$i=0;
$total_amount=0;
$str = "&METHOD=SetExpressCheckout
&RETURNURL=$returnURL
&CANCELURL=$cancelURL
&L_PAYMENTREQUEST_0_NAME0=$product_name
&L_PAYMENTREQUEST_0_NUMBER0=$qty
&L_PAYMENTREQUEST_0_AMT0=$price
&L_PAYMENTREQUEST_0_DESC0=$product_name
&PAYMENTREQUEST_0_AMT=$price
&PAYMENTREQUEST_0_PAYMENTACTION=$paymentType
&PAYMENTREQUEST_0_CURRENCYCODE=$currencyID";
$nvpStr=$nvpStr.$str;
$httpParsedResponseAr = $this->PPHttpPost('SetExpressCheckout', $nvpStr);
if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"]))
{
// Redirect to paypal.com.
$token = urldecode($httpParsedResponseAr["TOKEN"]);
$payPalURL = "https://www.$environment.paypal.com/webscr&cmd=_express-checkout&token=$token";
if("sandbox" === $environment)
{
$payPalURL = "https://www.$environment.paypal.com/webscr&cmd=_express-checkout&token=$token";
}
header("Location: $payPalURL");
exit;
}
else
{
exit('SetExpressCheckout failed: ' . print_r($httpParsedResponseAr, true));
}
}
/** SetExpressCheckout NVP example; last modified 08MAY23.
*
* Initiate an Express Checkout transaction.
*/
/**
* Send HTTP POST Request
*
* @param string The API method name
* @param string The POST Message fields in &name=value pair format
* @return array Parsed HTTP Response body
*/
private function PPHttpPost($methodName_, $nvpStr_) {
//global $environment;
$environment = 'sandbox'; // or 'beta-sandbox' or 'live'
// Set up your API credentials, PayPal end point, and API version.
$API_UserName = urlencode('saswat_1360720799_biz_api1.gmail.com');
$API_Password = urlencode('1360720821');
$API_Signature = urlencode('ApDCeFez-N1Gd1-O3ubTGdpyiow4AlNlRemm8XJFcbsA.WbSMtlMSqHf');
$API_Endpoint = "https://api-3t.paypal.com/nvp";
if("sandbox" === $environment) {
$API_Endpoint = "https://api-3t.$environment.paypal.com/nvp";
}
$version = urlencode('65.0');
// Set the curl parameters.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
// Turn off the server and peer verification (TrustManager Concept).
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
// Set the API operation, version, and API signature in the request.
$nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$API_Password&USER=$API_UserName&SIGNATURE=$API_Signature$nvpStr_";
// Set the request as a POST FIELD for curl.
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
// Get response from the server.
$httpResponse = curl_exec($ch);
if(!$httpResponse) {
exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
}
// Extract the response details.
$httpResponseAr = explode("&", $httpResponse);
$httpParsedResponseAr = array();
foreach ($httpResponseAr as $i => $value) {
$tmpAr = explode("=", $value);
if(sizeof($tmpAr) > 1) {
$httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
}
}
if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
}
return $httpParsedResponseAr;
}
我在Paypal沙箱中有三个帐户:两个商家和一个个人。我的所有Paypal账户都以美元作为默认货币。
在上面的代码中我使用欧元作为货币。
当我进行交易时,如果我从我的个人(买方)账户用欧元付款,那么我的买家账户就会扣除相应的金额(相当于从我的买方账户中扣除的美元金额)。这完全没问题,没有问题。
问题是我的商家或(卖家)帐户中没有添加任何金额。
我在Stack Overflow上发现了一篇文章:
如果交易的货币代码和卖家帐户不相符 匹配,然后钱不会被卖给卖家帐户
我将欧元兑换成美元,(因为我的沙盒卖家测试帐户是美元),并发现在将其转换为美元后,我的钱就会被添加到我的卖家帐户中。
这只是沙箱的问题,还是它也适用于现场支付宝贝?
我有一个网站,买家可以支付英镑,欧元,新元,新元,澳元。
如果交易需要以特定货币执行,即根据卖家账户设置的货币,则无需使用不同的货币。
由于在SetExpressCheckOut中传递的currencyCode应与DoExpressCheckout匹配,并且因为我遇到问题,currencyCode需要与沙盒卖家帐户的相同,所以即使买家选择了GBP,我也必须将其发送到SetExpressCheckout作为卖家帐户的currencyCode。
答案 0 :(得分:3)
您应该通过相关商家帐户的控制面板添加您希望接收付款的货币。
转到Profile
- &gt; My Settings
- &gt;财务信息选项卡和Currency Balances
。从那里选择一种货币并将其添加到列表中。然后,您收到的付款将保留在相应的货币余额中,直到您将其转换为您想要的任何货币余额。
答案 1 :(得分:1)
默认情况下,以您未持有的货币进行的交易将一直保留,直到您决定如何处理它们为止。如果您登录有问题的卖家帐户,您应该会看到您的历史记录中列出的交易。你应该能够接受它或者从那里否认它。
有两种解决方法: