在本文中,让咱们看看如何施行领取网关PHP源代码我的项目。咱们曾经在一篇用PHP语言集成的文章中分明地解释了这个过程。然而所有技术的步骤都是雷同的。因而,请浏览此处的集成指南。其实步骤很简略,咱们只须要输出商户密钥和salt。
源码:paywks.top/ka
这里我有应用框架,因为领取网关不像简略的过程。咱们须要手动设置一些更改并施行代码。所以当咱们应用COREPHP时,会面临更多的错误处理艰难。这就是为什么大多数开发人员倡议应用Laravel、Codeigniter等框架的起因。
领取网关PHP要遵循的步骤
如果您是该类别的初学者,请浏览官网文档。之后,您对构建代码有了一些想法。第一步是抉择最好的领取网关提供商之一。
我心愿你的零碎上曾经有下载节点,以提取依赖管理器。所以首先通过命令提示符创立Laravel我的项目。
useShipu\Aamarpay\Aamarpay; $config=[ 'store_id'=>'Yourstoreid', 'signature_key'=>'Yoursignaturekey', 'sandbox'=>true, 'redirect_url'=>[ 'success'=>[ 'route'=>'payment.success' ], 'cancel'=>[ 'route'=>'payment.cancel' ] ] ]; $payment=newAamarpay($config);
下面的代码解释了连贯到数据库的模块的必填字段。而后只有咱们可能与数据库系统进行通信。否则,确切的数据不会在后端通信中传输。
用法
应用形式次要用于后端过程,例如数据如何在服务器端拜访和存储。在这个我的项目中,我应用了MySQL数据库。它是95%的开发人员的次要举荐语言。
传递付款网址
为齐全治理后端过程的领取网关服务器传递URL。这意味着取得转账的齐全许可并从客户那里收到金额。
use\Shipu\Aamarpay\Aamarpay; ... $payment=newAamarpay(config('aamarpay')); return$payment->customer([ 'cus_name'=>'ShipuAhamed',//Customername 'cus_phone'=>'01616022669'//CustomerPhone 'cus_email'=>'shipuahamed01@gmail.com',//Customeremail ])->transactionId()->amount(3500)->hiddenValue(); or return$payment->customer([ 'cus_name'=>'ShipuAhamed',//Customername 'cus_phone'=>'9854345483'//CustomerPhone 'cus_email'=>'shipuahamed01@gmail.com',//Customeremail ])->amount(3500)->hiddenValue();
出于演示目标,在上一节中提供了未经验证的详细信息。但在直播过程中,咱们必须给出通过验证的信息。之后,只有特定客户可能发送和接管付款。现在,大多数人都进行在线领取,例如Payumoney、CCAvenue、网上银行、Phonepe和更多应用程序。
领取网关流程
个别咱们在进行网上支付时,交易失败的状况有三种可能。那是,
胜利音讯(金额将胜利贷记/借记)
失败(服务器忙)
已勾销(客户本人提出)
Route::post('payment/success','YourMakePaymentsController@paymentSuccess')->name('payment.success'); Route::post('payment/failed','YourMakePaymentsController@paymentFailed')->name('payment.failed'); Route::post('payment/cancel','YourMakePaymentsController@paymentCancel')->name('payment.cancel');
在寰球大风行的时代,一个安稳运行的领取网关是经营具备大量在线业务的企业的要害。如果您曾经在应用像BigCommerce这样的电子商务软件,那么您简直不须要任何编码技能,因为该应用程序曾经无缝内置了PayPal等次要领取网关。当您想将领取网关间接连贯到您的网站时,这项技能就变得至关重要。如果您具备C#、Java或PHP编码技能,那么这些教程将使您更轻松地实现集成所选领取网关的步骤。
PHP中的领取网关集成
咱们将以Stripe为例,向咱们展现如何在PHP中进行领取网关集成。借助Stripe的领取网关,您能够通过集成结帐零碎并启用领取性能,间接在您的网站上轻松承受信用卡。
要在基于PHP的网站中集成Stripe领取网关,您须要实现以下性能。
1、筹备HTML表单以收集信用卡信息。
2、创立Stripe令牌以平安地传输卡信息。
3、提交蕴含卡详细信息的表格。
4、验证卡并解决费用。
5、在数据库中插入付款详细信息,以便向用户显示状态。
测试条API密钥数据
在启用Stripe领取网关集成之前,您须要对其进行彻底测试。要测试信用卡领取流程,您须要在您的Stripe帐户中生成TESTAPI密钥。
1、登录您的Stripe帐户并导航至API页面。
2、在测试数据局部下,您会看到列出了API密钥。要显示密钥,请单击显示测试密钥令牌按钮。
收集Publishablekey和Secretkey以供稍后在脚本中应用。
在持续之前,您可能须要查看文件构造:
创立数据库表
接下来,您须要在数据库中创立一个表来保留交易明细。接下来是在MySQL数据库中创立订单表的SQL。
CREATETABLE`orders`( `id`int(11)NOTNULLAUTO_INCREMENT, `name`varchar(100)COLLATEutf8_unicode_ciNOTNULL, `email`varchar(255)COLLATEutf8_unicode_ciNOTNULL, `card_num`bigint(20)NOTNULL, `card_cvc`int(5)NOTNULL, `card_exp_month`varchar(2)COLLATEutf8_unicode_ciNOTNULL, `card_exp_year`varchar(5)COLLATEutf8_unicode_ciNOTNULL, `item_name`varchar(255)COLLATEutf8_unicode_ciNOTNULL, `item_number`varchar(50)COLLATEutf8_unicode_ciNOTNULL, `item_price`float(10,2)NOTNULL, `item_price_currency`varchar(10)COLLATEutf8_unicode_ciNOTNULLDEFAULT'usd', `paid_amount`varchar(10)COLLATEutf8_unicode_ciNOTNULL, `paid_amount_currency`varchar(10)COLLATEutf8_unicode_ciNOTNULL, `txn_id`varchar(100)COLLATEutf8_unicode_ciNOTNULL, `payment_status`varchar(50)COLLATEutf8_unicode_ciNOTNULL, `created`datetimeNOTNULL, `modified`datetimeNOTNULL, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8COLLATE=utf8_unicode_ci;
数据库配置(dbConfig.php)
您将须要dbConfig.php文件来连贯和抉择数据库。在数据库凭证后指定数据库主机($dbHost)、用户名($dbUsername)、明码($dbPassword)和名称($dbName)。
<?php //数据库凭据 $dbHost='本地主机'; $dbUsername='root'; $dbPassword='*****'; $dbName='codexworld'; //连贯数据库 $db=newmysqli($dbHost,$dbUsername,$dbPassword,$dbName); //连贯失败显示谬误 如果($db->connect_errno){ printf("连贯失败:%s\n",$db->connect_error); 进口(); } 领取表格(index.php) JavaScript 包含StripeJavaScript库,以将敏感信息间接从浏览器平安地发送到Stripe。 <!--条纹JavaScript库--> <scripttype="text/javascript"src="https://js.stripe.com/v2/"></script> jQuery库不是应用Stripe所必须的;它仅用于此示例。 <!--jQuery仅用于此示例;不须要应用Stripe--> <scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 在JavaScript代码中,将标识您网站的可公布API密钥设置为Stripe。stripeResponseHandler()函数创立一个一次性令牌并在领取表单HTML中插入一个令牌字段。 <脚本类型="文本/javascript"> //设置你的可公布密钥 Stripe.setPublishableKey('Your_API_Publishable_Key'); //回调以解决来自条带的响应 性能stripeResponseHandler(状态,响应){ 如果(响应。谬误){ //启用提交按钮 $('#payBtn').removeAttr("禁用"); //在表单上显示谬误 $(".payment-errors").html(response.error.message); }别的{ varform$=$("#paymentFrm"); //获取代币id vartoken=response['id']; //将令牌插入表单 form$.append("<inputtype='hidden'name='stripeToken'value='" +令牌+"'/>"); //提交表单到服务器 模式$.get(0).submit(); } } $(文档).ready(函数(){ //在表单提交 $("#paymentFrm").submit(函数(事件){ //禁用提交按钮以避免反复点击 $('#payBtn').attr("已禁用","已禁用"); //创立一次性令牌以向用户免费 条纹.createToken({ 号码:$('.card-number').val(), cvc:$('.card-cvc').val(), exp_month:$('.card-expiry-month').val(), exp_year:$('.card-expiry-year').val() },stripeResponseHandler); //从回调中提交 返回假; }); });
以下HTML表单收集用户信息(姓名和电子邮件)和卡详细信息(卡号、到期日期和CVC号)。为了进一步的卡领取解决,将表单提交给PHP脚本(submit.php)。
<h1>应用Stripe收取55美元</h1> <!--显示createToken返回的谬误--> <spanclass="payment-errors"></span> <!--条纹领取表单--> <formaction="submit.php"method="POST"id="paymentFrm"> <p> <label>姓名</label> <inputtype="text"name="name"size="50"/> </p> <p> <label>电子邮件</label> <inputtype="text"name="email"size="50"/> </p> <p> <label>卡号</label> <inputtype="text"name="card_num"size="20"autocomplete="off" class="卡号"/> </p> <p> <label>简历</label> <inputtype="text"name="cvc"size="4"autocomplete="off"class="card-cvc"/> </p> <p> <label>过期工夫(MM/YYYY)</label> <inputtype="text"name="exp_month"size="2"class="card-expiry-month"/> <跨度>/</跨度> <inputtype="text"name="exp_year"size="4"class="card-expiry-year"/> </p> <buttontype="submit"id="payBtn">提交付款</button>
PHP库
接下来,咱们将应用StripePHP库来解决卡领取。该图书馆可在此处取得。
验证和解决付款(submit.php)
在此文件中,验证提交的卡详细信息,并应用StripePHP库解决费用。
1、从提交的表单中获取令牌、卡详细信息和用户信息。
包含StripePHP库。
2、设置咱们在StripeTestAPIData局部创立的Publishablekey和Secretkey。
3、应用用户电子邮件和Stripe令牌将客户增加到Stripe。
4、指定产品详细信息并向信用卡或借记卡免费。
5、检索先前创立的费用详细信息。
6、如果免费胜利,订单和交易详情将被插入数据库。否则,将显示一条谬误音讯。
//checkwhetherstripetokenisnotempty if(!empty($_POST['stripeToken'])){ //gettoken,cardanduserinfofromtheform $token=$_POST['stripeToken']; $name=$_POST['name']; $email=$_POST['email']; $card_num=$_POST['card_num']; $card_cvc=$_POST['cvc']; $card_exp_month=$_POST['exp_month']; $card_exp_year=$_POST['exp_year']; //includeStripePHPlibrary require_once('stripe-php/init.php'); //setapikey $stripe=array( "secret_key"=>"Your_API_Secret_Key", "publishable_key"=>"Your_API_Publishable_Key" ); \Stripe\Stripe::setApiKey($stripe['secret_key']); //addcustomertostripe $customer=\Stripe\Customer::create(array( 'email'=>$email, 'source'=>$token )); //iteminformation $itemName="PremiumScriptCodexWorld"; $itemNumber="PS123456"; $itemPrice=55; $currency="usd"; $orderID="SKA92712382139"; //chargeacreditoradebitcard $charge=\Stripe\Charge::create(array( 'customer'=>$customer->id, 'amount'=>$itemPrice, 'currency'=>$currency, 'description'=>$itemName, 'metadata'=>array( 'order_id'=>$orderID ) )); //retrievechargedetails $chargeJson=$charge->jsonSerialize(); //checkwhetherthechargeissuccessful if($chargeJson['amount_refunded']==0&&empty($chargeJson ['failure_code'])&&$chargeJson['paid']==1&&$chargeJson['captured']==1){ //orderdetails $amount=$chargeJson['amount']; $balance_transaction=$chargeJson['balance_transaction']; $currency=$chargeJson['currency']; $status=$chargeJson['status']; $date=date("Y-m-dH:i:s"); //includedatabaseconfigfile include_once'dbConfig.php'; //inserttansactiondataintothedatabase $sql= "INSERTINTOorders(name,email,card_num,card_cvc,card_exp_month,card_exp_year, item_name,item_number,item_price,item_price_currency,paid_amount, paid_amount_currency,txn_id,payment_status,created,modified)VALUES ('".$name."','".$email."','".$card_num."','".$card_cvc."','".$card_exp_month."', '".$card_exp_year."','".$itemName."','".$itemNumber."','".$itemPrice."','".$currency."', '".$amount."','".$currency."','".$balance_transaction."' ,'".$status."','".$date."','".$date."')"; $insert=$db->query($sql); $last_insert_id=$db->insert_id; //iforderinsertedsuccessfully if($last_insert_id&&$status=='succeeded'){ $statusMsg="<h2>Thetransactionwassuccessful.</h2> <h4>OrderID:{$last_insert_id}</h4>"; }else{ $statusMsg="Transactionhasbeenfailed"; } }else{ $statusMsg="Transactionhasbeenfailed"; } }else{ $statusMsg="Formsubmissionerror......."; } //showsuccessorerrormessage echo$statusMsg;