Briefly organize the PHP project to integrate PayPal payment functions.
1. Form construction:
<span><</span><span>form </span><span>method</span><span>="post"</span><span> name</span><span>="form"</span><span> action</span><span>="https://www.paypal.com/cgi-bin/webscr"</span><span>></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="rm"</span><span> value</span><span>="2"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="cmd"</span><span> value</span><span>="_xclick"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="business"</span><span> value</span><span>="商家账号"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="return"</span><span> value</span><span>="返回网址"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="cancel_return"</span><span> value</span><span>="取消返回网址"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="notify_url"</span><span> value</span><span>="用于接收PayPal发送的即时付款通知的URL,必须是有效的URL"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="item_name"</span><span> value</span><span>="物品名称"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="item_number"</span><span> value</span><span>="可用于跟踪购买或捐赠的传递变量,在付款完成时传回给您"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="amount"</span><span> value</span><span>="物品的价格(购物车中所有物品的总价格"</span><span>/></span> <span><</span><span>input </span><span>type</span><span>="hidden"</span><span> name</span><span>="currency_code"</span><span> value</span><span>="币种"</span><span>/></span> <span></</span><span>form</span><span>></span>
2. IPN verification part
<?<span>php </span><span>class</span><span> paypal { </span><span>var</span> <span>$ipn_data</span> = <span>array</span>(); <span>//</span><span> array contains the POST values for IPN</span> <span>var</span> <span>$fields</span> = <span>array</span>(); <span>//</span><span> PayPal接受到客户的付款后,Paypal会向网站POST回客户提交的表单信息,<br /> // 必须将收到的POST信息对原样返回给PayPal进行验证,<br /> // 内容有:item_name=iPhone 6,quantity=1,amount=499,currency_code=USD等所有表单信息,<br /> // 在调用验证IPN之前事先需要初始化好</span> <span>var</span> <span>$paypal_url</span> = 'https://www.paypal.com/cgi-bin/webscr';<span>//</span><span>sandbox:https://www.sandbox.paypal.com/cgi-bin/webscr</span> <span> </span><span>function</span> validate_ipn() {<span>//</span><span>验证IPN // parse the paypal URL</span> <span>$url_par</span>=<span>parse_url</span>(<span>$this</span>-><span>paypal_url); </span><span>//</span><span> generate the post string from the _POST vars aswell as load the // _POST vars into an arry so we can play with them from the calling // script.</span> <span>$post_str</span> = ''<span>; </span><span>foreach</span> (<span>$_POST</span> <span>as</span> <span>$field</span>=><span>$value</span><span>) { </span><span>$this</span>->ipn_data["<span>$field</span>"] = <span>$value</span><span>; </span><span>$post_str</span> .= <span>$field</span>.'='.<span>urlencode</span>(<span>stripslashes</span>(<span>$value</span>)).'&'<span>; } </span><span>$post_str</span>.="cmd=_notify-validate"; <span>//</span><span> append ipn command // open the connection to paypal</span> <span>$fp</span> = <span>fsockopen</span>(<span>$url_par</span>[host],"80",<span>$errnum</span>,<span>$errstr</span>,30<span>); </span><span>if</span>(!<span>$fp</span><span>) { </span><span>//</span><span> could not open the connection.</span> <span>return</span> <span>false</span><span>; } </span><span>else</span><span> { </span><span>//</span><span> Post the data back to paypal</span> <span>fputs</span>(<span>$fp</span>, "POST ".<span>$url_par</span>[path]." HTTP/1.1\r\n"<span>); </span><span>fputs</span>(<span>$fp</span>, "Host: ".<span>$url_par</span>[host]."\r\n"<span>); </span><span>fputs</span>(<span>$fp</span>, "Content-type: application/x-www-form-urlencoded\r\n"<span>); </span><span>fputs</span>(<span>$fp</span>, "Content-length: ".<span>strlen</span>(<span>$post_str</span>)."\r\n"<span>); </span><span>fputs</span>(<span>$fp</span>, "Connection: close\r\n\r\n"<span>); </span><span>fputs</span>(<span>$fp</span>, <span>$post_str</span> . "\r\n\r\n"<span>); </span><span>//</span><span> loop through the response from the server and append to variable</span> <span>while</span>(!<span>feof</span>(<span>$fp</span><span>)) { </span><span>$this</span>->validate_ipn_response .= <span>fgets</span>(<span>$fp</span>, 1024<span>); } </span><span>fclose</span>(<span>$fp</span>); <span>//</span><span> close connection</span> <span> } </span><span>if</span> (<span>eregi</span>("VERIFIED",<span>$this</span>-><span>validate_ipn_response)) { </span><span>return</span> <span>true</span><span>; } </span><span>else</span><span> { </span><span>return</span> <span>false</span><span>; } } } </span>?>
The diagram of Instant Payment Notification (IPN) is as follows:
1) The customer clicks the "Pay" button to pay to your account;
2) After PayPal receives the customer’s payment, it sends the IPN to the URL specified by your server via POST;
3) After your server receives the IPN, you must return the received POST information to PayPal for verification. PayPal uses this method to help you prevent spoofing or "man-in-the-middle" attacks; (Verification of IPN information The process is called notification confirmation)
4) PayPal returns verification information, which is VERIFIED if it passes the verification, and INVALD if it fails;
5) Process payment details based on verification information.
Related information:
Developer: https://developer.paypal.com/
Instant payment notification: https://www.paypal-biz.com/development/documentation/PayPal_IPN&PDT_Guide_V1.0.pdf
paypal Standard Edition :https://www.paypal-biz.com/development/documentation/PayPal_WPS_Guide_CN_V2.0.pdf