簡體   English   中英

Paypal 智能按鈕與 Javascript 並獲取到 PHP 頁面

[英]Paypal Smart buttons with Javascript and fetch to a PHP page

我遇到了一些 Javascript 代碼的間歇性問題,我似乎無法解決,希望能得到任何幫助。

我有一個露營地預訂頁面,它使用 Paypal 智能按鈕來實現付款。 In part of the Paypal Javascript 'create order' code I extract the entered customer details, populate a form using Javascript and then use fetch to post the info to a server side PHP page which inserts the info into a database.

問題是這似乎失敗了 40-50% 的時間,即 Paypal 付款成功,但似乎沒有觸發數據庫插入。

Javascript 代碼如下。 任何幫助表示贊賞。

謝謝

內維爾

 <script> var fname=""; var sname=""; var email=""; var mobile=""; var invoice_id=""; paypal.Buttons({ createOrder: function(data, actions) { // This function sets up the details of the transaction, including the amount and line item details. //1. validate form details, abort if incorrrect if (validateForm()==false) { alert("Incorrect Booking form data provided, aborting payment function.\r\n\r\nPlease recheck Booking form data and resubmit."); //actions.disable(); return false; } //2. extract customer info from webpage try { email = document.forms["bookingform"]["email"].value; invoice_id=document.forms["bookingform"]["invoice_id"].value; fname= document.forms["bookingform"]["fname"].value; sname = document.forms["bookingform"]["sname"].value; mobile = document.forms["bookingform"]["mobile"].value; if (invoice_id=="") { invoice_id= sname.toUpperCase(); invoice_id=invoice_id+" "; invoice_id=invoice_id.substring(0,3)+"-"; invoice_id=invoice_id+(100000 + Math.floor(Math.random() * 900000)); invoice_id=invoice_id.substring(0,10); document.forms["bookingform"]["invoice_id"].value=invoice_id; } var tot_night = document.getElementById('tot_nights').innerHTML; var tot_amt=document.getElementById("tot_amt").innerHTML; tot_amt = tot_amt.replace("$", ""); var date_from = document.forms["bookingform"]["date_from"].value; var date_to = document.forms["bookingform"]["date_to"].value; var vehicle_rego = document.forms["bookingform"]["vehicle_rego"].value; var no_adults = document.forms["bookingform"]["no_adults"].value; var no_children = document.forms["bookingform"]["no_children"].value; var power = document.forms["bookingform"]["power"].checked; var tent_hire = document.forms["bookingform"]["tent_hire"].checked; if (power=='true' || power==true) { power ="Yes"; } else { power="No"; } if (tent_hire=='true' || tent_hire==true) { tent_hire ="Yes"; } else { tent_hire="No"; } var street_address = document.forms["bookingform"]["street_address"].value; var locality = document.forms["bookingform"]["locality"].value; var package_type = document.forms["bookingform"]["package_type"].value var voucher = document.forms["bookingform"]["voucher"].value var notes = document.forms["bookingform"]["notes"].value //$('#ref_fld').val(details.id); $('#ref_fld').val('0'); } catch(err) {} //3. create form, insert data var formdata = new FormData(); if (formdata) { try { formdata.append("post_function","make_booking"); formdata.append("notes", notes); formdata.append("invoice_id", invoice_id); formdata.append("voucher", voucher); formdata.append("package_type", package_type); street_address=street_address.replace('"', ''); street_address=street_address.replace("'", ""); notes=notes.replace('"', ''); notes=notes.replace("'", ""); formdata.append("locality", locality); formdata.append("street_address", street_address); formdata.append("vehicle_rego",vehicle_rego); formdata.append("trans_id",'0'); formdata.append("tot_amt",tot_amt); formdata.append("tot_night",tot_night); formdata.append("tent_hire",tent_hire); formdata.append("power",power); formdata.append("no_children",no_children); formdata.append("no_adults",no_adults); formdata.append("date_to",date_to); formdata.append("date_from",date_from); formdata.append("mobile",mobile); formdata.append("email",email); formdata.append("sname",sname); formdata.append("fname",fname); } catch(err) {} //4. post form const url = '/includes_macas/mysql_functions.php'; fetch(url, { method: 'POST', body: formdata }).catch(function(error) { console.log(error); // Display error if there is one. }) } return actions.order.create({ payer: { name: { given_name: fname, surname: sname }, email_address: email, phone: { phone_type: "MOBILE", phone_number: { national_number: mobile } } }, purchase_units: [{ invoice_id: invoice_id, amount: { value: tot_amt } }], application_context: { shipping_preference: "NO_SHIPPING" } }); }, onClick: function() { //$('#wait').show(); }, onApprove: function(data, actions) {.......

不要在客戶端使用actions.order.create() /.capture()然后記錄到數據庫,因為如果你這樣做,不能保證能夠在你的服務器上記錄成功的捕獲。

相反,為了正確的服務器集成,創建兩條路由——一條用於“創建訂單”,一條用於“捕獲訂單”,如此處所述。 您的路線應該返回/輸出 JSON(並且只有 JSON)。 在調用 PayPal 並在將 JSON 返回給客戶端之前執行任何數據庫寫入后,捕獲路由應檢查是否成功。

將您的兩條路線與以下批准流程配對: https://developer.paypal.com/demo/checkout/#/pattern/server

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM