在本文中,让咱们看看如何施行领取网关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;
发表回复