http://laravelacademy.org/post/1492.html
上一节我们讨论了在Laravel中如何使用支付宝进行支付,这一节我们讲另一种常见的支付方式:银联支付。通过上一节的学习想必大家已经了解了OmniPay这个牛逼的GitHub项目,也对如何使用OmniPay for Laravel 5 & Lumen这个Laravel包有了大致的了解。没错,我们接下来要讲的银联支付还是使用这个Laravel包,并集成OmniPay提供的银联支付(UnionPay)接口——UmniPay UnionPay。
1、安装银联支付依赖包
废话不多说,下面直接切入正题。由于我们在上一节已经安装了ignited/laravel-omnipay这个包,这里我们只需要安装银联支付包即可:
composer require lokielse/omnipay-unionpay dev-master
2、获取银联支付配置信息
到银联支付开发者中心注册账户并提交商户资料进行审核,等待审核通过后获取相关证书ID等信息用于填写银联支付配置选项。
如果你是测试的话银联支付提供了相应的测试接口和配置数据:银联支付测试配置信息
以及测试银行卡信息:
卡号 卡性质 机构名称 手机号码 密码 CVN2 有效期 证件号 姓名
6216261000000000018 借记卡 平安银行 13552535506 123456 341126197709218366 全渠道
6221558812340000 贷记卡 平安银行 13552535506 123456 123 1711 341126197709218366 互联网
短信验证码 111111
然后我们去https://open.unionpay.com/ajweb/help/file/techFile下载PHP版本的实例代码,比如我们这里测试的是网关支付,那就下载网关支付对应的实例代码,解压下载的压缩文件,然后将下面这个三个文件拷出来放到Laravel项目指定目录(比如storage/app/unionpay/certs):
银联支付验证文件
3、配置文件
配置config/laravel-omnipay.php(如果没有该配置文件参考上一节相应操作),添加银联支付配置:
'unionpay' => [
'driver' => 'UnionPay_Express',
'options' => [
'merId' => '777290058120462',
'certPath' => '/path/to/storage/app/unionpay/certs/PM_700000000000001_acp.pfx',
'certPassword' =>'000000',
'certDir'=>'/path/to/certs',
'returnUrl' => 'Your ReturnUrl Here',
'notifyUrl' => 'Your NotifyUrl Here'
]
]
4、基本使用
OmniPay UnionPay提供了以下支付网关接口:
Union_Express 银联全产品网关(PC,APP,WAP支付)
Union_LegacyMobile 银联老网关(APP)
Union_LegacyQuickPay 银联老网关(PC)
本例中我们使用Union_Express网关。
定义路由
//银联支付处理
Route::get('unionpay/pay','UnionpayController@pay');
//支付后回调页面
Route::post('unionpay/return','UnionpayController@result');
支付
新建控制器UnionPayController,定义pay方法:
public function pay(){
$gateway = Omnipay::gateway('unionpay');
$order = [
'orderId' => date('YmdHis'),
'txnTime' => date('YmdHis'),
'orderDesc' => 'My test order title', //订单名称
'txnAmt' => '100', //订单价格
];
$response = $gateway->purchase($order)->send();
$response->redirect();
}
回调
定义result方法:
public function result(){
$gateway = Omnipay::gateway('unionpay');
$response = $gateway->completePurchase(['request_params'=>$_REQUEST])->send();
if ($response->isPaid()) {
exit('支付成功!');
}else{
exit('支付失败!');
}
}
此外,由于该回调请求来自第三方API,无法通过CSRF验证,所以需要在CSRF验证中排除该URL,否则会抛出TokenMismatchException异常,具体排除方法可参考CSRF攻击原理及其防护这篇教程,这里我们要排除的URL是unionpay/return。
5、银联支付测试
在浏览中访问http://laravel.app:8000/unionpay/pay,页面会跳转到银联支付页面:
银联支付测试页面
我们将测试银行卡号填写到输入框并点击下一步:
银联支付测试页面
将测试卡号对应身份证号码填入输入框,然后点击“免费获取”,最后直接将手机验证码111111填写到验证码输入框,然后点击“确认付款”,页面就会跳转到支付成功页面:
银联支付测试成功页面
点击“返回商户”,则页面跳转到http://laravel.app:8000/unionpay/return并显示:
支付成功!
我们这里简单测试了支付和回调接口,更多接口方法使用请参考Omnipay: UnionPay。
Laravel 支付解决方案之如何使用银联支付进行支付
前往
- Software
- ↳ CodeCharge Studio
- ↳ CodeCharge
- ↳ DemoCharge
- ↳ SuperPDF
- ↳ 551einv
- ↳ E3進銷存
- 程式語言
- ↳ PHP
- ↳ CodeLobster PHP Edition
- ↳ Yii
- ↳ CodeIgniter
- ↳ Phalcon
- ↳ Symfony
- ↳ FuelPHP
- ↳ Zend Framework 2
- ↳ laravel
- ↳ WordPress
- ↳ ASP.NET/C#
- ↳ ASP/VBScript
- ↳ JSP
- ↳ Java Servlets
- ↳ ColdFusion
- ↳ Perl
- ↳ Java Script
- ↳ jQuery
- ↳ HTML + CSS
- ↳ jQuery
- ↳ nodejs
- ↳ VB6
- ↳ Git
- ↳ App Inventor 2
- ↳ bash
- ↳ C++/ VC/ OpenCV
- ↳ OpenCV
- ↳ go
- ↳ cordova
- ↳ python
- ↳ Xamarin
- ↳ Assembly
- 資料庫
- ↳ MySQL
- ↳ PostgreSQL
- ↳ ORACLE
- ↳ Access
- ↳ SQL Server
- ↳ SQLite
- ↳ MariaDB
- ↳ Mongodb
- 作業系統
- ↳ Linux
- ↳ Ubuntu
- ↳ CentOS
- ↳ Mint
- ↳ Mandriva
- ↳ Debian
- ↳ Red Hat Enterprise Linux
- ↳ Oracle Linux
- ↳ Fedora
- ↳ Kali Linux
- ↳ OpenSUSE
- ↳ Elementary OS
- ↳ Microsoft
- ↳ Server 2008 R2
- ↳ Server 2012 R2
- ↳ Server 2012
- ↳ 8
- ↳ 10
- ↳ System Center 2016
- ↳ NOVELL
- ↳ FreeBSD
- ↳ VMware
- ↳ VirtualBox
- ↳ Mac OS X
- ↳ Solaris
- ↳ iOS
- ↳ Android
- ↳ Cloud
- ↳ OpenStack
- ↳ Docker
- ↳ Proxmox VE
- ↳ CloudReady
- ↳ chrome
- 網頁伺服器
- ↳ apache
- ↳ tomcat
- ↳ nginx
- ↳ IIS
- ↳ JBoss
- ↳ weblogic
- ↳ WebHosting
- 硬體
- ↳ 硬體及週邊
- ↳ RouterOS
- ↳ LEGO NXT
- ↳ Arduino
- ↳ MSP430
- ↳ Raspberry Pi
- ↳ OpenERP
- ↳ Storage
- ↳ Server
- ↳ Brocade
- ↳ MODELS
- ↳ FortiGate
- 軟體
- ↳ sublime
- ↳ LibreNMS