2015-10-14 87 views
1

我在一个网站上工作,用户将不得不支付使用一些服务。所以我知道贝宝是我可以使用的服务。用户可以使用借记卡,信用卡,PayPal账户等。我知道贝宝按钮可以用于它。但在我的网站上,我想给用户一个选项来添加他们的选择量。用户可以支付5美元或5万美元或任何他们想要的东西。我不知道我是否可以使用PayPal按钮。哪个PAYPAL服务更适合网站在线交易?

总之用户将在表格中输入金额。提交表单后,它会将用户重定向到PayPal网站,以供付款。作为回报,我想确保他们已经支付了多少,交易是否成功等等,这样我就可以将详细信息存储在数据库中,如果交易成功,用户将获得账户余额。

因此,所有我想知道的是它的服务将更好地为我从贝宝?

像PayPal按钮或PayPal网关或PayPal流网关?

回答

1

我已经在我的网站上完成了这件事。我会为它发布一些代码。基本上你创建了一个没有隐藏的输入表单,称之为金额,这样用户可以输入金额,然后将其传递给paypal。贝宝网站说它不起作用,但它确实。

我用低端贝宝标准,而不是他们的任何发烧友接口。我有用户添加到购物车,然后支付购物车。但是你可以为购买按钮做同样的事情。使用哪种PayPal服务无关紧要。如果可以用基本的贝宝标准来完成,你可以用它们中的任何一个来完成......!

您也可以从贝宝获得交易完成后,用户支付的内容各个方面。所以有一个变量可用于总金额和个人金额等。

这是关键为用户设置了一个捐款金额输入:

<input type="hidden" name="button_subtype" value="services"> 

,当然还有:

 <b>Amount $:&nbsp;&nbsp; (Example:&nbsp; nnn.nn)</b> 
    <input type="text" name="amount"> 

我没有那么familar与变量comign从后面贝宝。对于你想要的贝宝标准应该从我已经读过的绝对工作。这里有两种方法可以做到这一点,并与贝宝标准都工作,所以将与贝宝的任何工作: 此链接包含以下接下来的两年也给出了简要概述: https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/wp_standard_overview/

1) https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/paymentdatatransfer/

2) https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNIntro/

下面是对形式码的主体。

<form target="_blank" action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
value="https://www.yourwebsite.com/logo.jpg"> --> 
<b>Amount $:&nbsp;&nbsp; (Example:&nbsp; nnn.nn)</b> 
    <input type="text" name="amount"> 

<input type="image" src="https://www.paypalobjects.com/en_US/i/btn /btn_cart_SM.gif" border="0" name="submit"> 

<input type="hidden" name="add" value="1"> 

<input type="hidden" name="cmd" value="_cart"> 

<input type="hidden" name="business" value="yours"> 

    <input type="hidden" name="item_name" value="donation"> 

<input type="hidden" name="no_shipping" value="0"> 

<input type="hidden" name="shipping" value="0.00"> 

    <input type="hidden" name="tax" value="0.00"> 

    <!-- Replace value with the web page you want the customer to return to --> 

<input type="hidden" name="shopping_url" value="http://www.yours"> 

<!-- services seems to be the trick -->    
<input type="hidden" name="button_subtype" value="services"> 

<input type="hidden" name="country" value="US"> 

<input type="hidden" name="currency_code" value="USD"> 

    <input type="hidden" name="lc" value="US"> 

    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_paynowCC_LG.gif:NonHosted"> 


    </form> 
+0

谢谢@curls,现在我了解如何使用PayPal按钮和自定义金额。 –

+0

@DjangoLearner - 不客气。发布如果你有问题,我会看。当你有机会时,请提出答案并投票给出答案! – curls

+0

再次感谢@curls。 :D –

1

我推荐使用paypal express checkout。这里一个简单的(PHP)例如:

 
// Parameters for SetExpressCheckout, which will be sent to PayPal
$padata['L_BILLINGAGREEMENTDESCRIPTION0'] = 'Product description'; $padata['L_BILLINGAGREEMENTDESCRIPTION0'] = $padata['L_BILLINGAGREEMENTDESCRIPTION0'] . ' $'.$product->price.'/month'; $padata['L_PAYMENTREQUEST_0_DESC0'] = $padata['L_BILLINGAGREEMENTDESCRIPTION0'] . ' $'.$product->price.'/month';
$padata['PAYMENTREQUEST_0_NOTIFYURL'] = 'http://site_url/paypal/ipn'; $padata['PAYMENTREQUEST_0_DESC'] = $product->name; $padata['RETURNURL'] = 'http://site_url/paypal/returnurl'; $padata['CANCELURL'] = 'http://site_url/paypal/cancelurl';
$padata['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD'; $padata['PAYMENTREQUEST_0_PAYMENTACTION'] = 'SALE'; $padata['PAYMENTREQUEST_0_ITEMAMT'] = $product->price;
$padata['PAYMENTREQUEST_0_AMT'] = $product->price;
$padata['L_BILLINGTYPE0'] = 'RecurringPayments';
$padata['L_PAYMENTREQUEST_0_NAME0'] = $product->name;
$padata['L_PAYMENTREQUEST_0_NUMBER0']= '322';
$padata['L_PAYMENTREQUEST_0_QTY0'] = '1';
$padata['L_PAYMENTREQUEST_0_AMT0'] = $product->price;
$paypal_data = http_build_query($padata); $httpParsedResponseAr = $this->PPHttpPost('SetExpressCheckout', $paypal_data); //Respond according to message we receive from Paypal if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])){ //Redirect user to PayPal store with Token received. $paypalurl ='https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='.$httpParsedResponseAr["TOKEN"].''; header('Location: '.$paypalurl); }else{ echo 'Error :'.urldecode($httpParsedResponseAr["L_LONGMESSAGE0"]).'';
}

页RETURNURL:

 
$hosteddata['L_BILLINGAGREEMENTDESCRIPTION0'] = 'Recurring Description';
$hosteddata['L_BILLINGAGREEMENTDESCRIPTION0'] = $hosteddata['L_BILLINGAGREEMENTDESCRIPTION0'] . ' $'.$pr->price.'/month';
$hosteddata['L_PAYMENTREQUEST_0_NAME0'] = $pr->name;
$hosteddata['PROFILEREFERENCE'] = $GetExpressCheckoutDetails['L_PAYMENTREQUEST_0_NUMBER0'];
$hosteddata['PROFILESTARTDATE'] = date('Y-m-d') . 'T' . date('H:i:s').'Z';
$hosteddata['SUBSCRIBERNAME'] = $GetExpressCheckoutDetails['FIRSTNAME'] . ' ' . $GetExpressCheckoutDetails['LASTNAME'];
$hosteddata['TOKEN'] = urlencode($_POST['token']);
$hosteddata['DESC'] = $hosteddata['L_BILLINGAGREEMENTDESCRIPTION0'];
$hosteddata['AMT'] = $pr->price;
$hosteddata['BILLINGPERIOD'] = 'Month';
$hosteddata['BILLINGFREQUENCY'] = '1';
$hosteddata['TOTALBILLINGCYCLES'] = '12';
$hosteddata['REGULARTOTALBILLINGCYCLES'] = '1';
$hosteddata['VERSION'] = '74.0';
$hosteddata['MAXFAILEDPAYMENTS'] = '1';
$hosteddata['L_PAYMENTREQUEST_0_QTY0'] = '1';
$hosteddata['L_BILLINGTYPE0'] = 'RecurringPayments';
$hosteddata['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Digital';
$hosteddata['L_PAYMENTREQUEST_0_AMT0'] = $pr->price;
$hosteddata['INITAMT'] = $pr->price;
$hosteddata['L_PAYMENTREQUEST_0_NUMBER0'] = $pr->id;
$hosteddata['PAYMENTREQUEST_0_NOTIFYURL'] = 'http://site_url/paypal/ipn';
$paypal_data = http_build_query($hosteddata); $hosted_saas_response = $this->PPHttpPost('CreateRecurringPaymentsProfile', $paypal_data);

我用一个单独的方法来发布参数到PayPal

 
private function PPHttpPost($methodName_, $nvpStr_) {
$api_username = '[email protected]'; $api_password = 'QWEQWEWQEQWEQEQWE';
$api_signature = 'WQEQWEQWEQWEWQEQWEQWEQWEQWEQWE.cT';
$api_endpoint = "https://api-3t.paypal.com/nvp";
$version = '124.0'; $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_endpoint);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
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);
$nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$api_password&USER=$api_username&SIGNATURE=$api_signature&$nvpStr_";
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
$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;
}
+0

谢谢@Pavel。这很有帮助。 –