在本文中,让我们看看如何实施支付网关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文件来连接和选择数据库。在数据库凭证后指定数据库主机(dbUsername)、密码(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脚本
接下来,我们将使用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;