Laravel 支付解决方案之如何使用银联支付进行支付

Laravel中使用银联支付

上一节我们讨论了在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借记卡平安银行13552535506123456  341126197709218366全渠道
6221558812340000贷记卡平安银行135525355061234561231711341126197709218366互联网
短信验证码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并显示:

支付成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值