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