开源中国连接http://www.oschina.net/question/565065_68123
本文档因为没有信用卡和网银,所以没测试,但是基本思路实现了,可以参考下,支付宝用燕十八老师视频里面的。
路由如下:
Route::get('pay',function(){
//$row为用户提交过来的内容
$row=[];
$row['v_amount'] = '0.01';//用户提交的金额
$row['v_moneytype'] = 'CNY';//人民币
$row['v_oid'] = '201608221111'.rand(1000,9999);//订单编号
$row['v_mid'] = '20272562';//商户编号,需要和第三方申请的
$row['v_url'] = 'yzj.com/finishpay';//支付完成跳转到该url
$row['key'] = '%()#QOKFDLS:1*&U';//与第三方申请返回的salt,一般放在.env文件中
//校验串加密算法,将订单中的v_amount,v_moneytype,v_oid,v_mid,v_url,key,拼接成无间隔字符串
//顺序不变,md5加密,在转换成大写
$row['v_md5info'] = strtoupper(md5(implode('',$row)));
return view('pay',$row);
});
//支付完成跳转路由,这里面需要做些判断,支付成功需要修改订单状态,如果第一次第三方提交过来信息服务器没有接受到,
//这种情况下不用担心,因为第三方平台会隔断时间继续发送信息再次访问,知道成功
Route::post('finishpay',function(){
//在接受之前要修改下全局中间件csrftoken,设置当前路由除外
//在Middleware/VerifyCsrfToken.php,设置$except=['finishpay']
//检测是否成功(可以使用Request对象),按下列顺序进行拼加密转成大写
$md5 = $_POST['v_oid'].$_POST['v_pstatus'].$_POST['v_amount'].$_POST['moneytype'].'%()#QOKFDLS:1*&U';
$md5 = strtoupper( md5($md5) );
if($md5 == $_POST['v_md5str']){
return view('finishpay',['msg' => '支付成功']);
}else{
return view('finishpay',['msg' => '支付失败']);
}
});
blade模板demo:
#pay.blade.php
#商户>>>>>>网银在线支付:
<form method=post action="https://pay3.chinabank.com.cn/PayGate">//提交第三方京东钱包支付接口
<input type=hidden name=v_mid value="{{$v_mid}}">//商户编号
<input type=hidden name=v_oid value="{{$v_oid}}">//订单号
<input type=hidden name=v_amount value="{{$v_amount}}">//订单金额
<input type=hidden name=v_moneytype value="{{$v_moneytype}}">//金额种类
<input type=hidden name=v_url value="{{$v_url}}">//返回的路径
支付动作完成后返回到该url,支付结果以POST方式发送
<input type=hidden name=v_md5info value="{{$v_md5info}}">//加密字符串
<input type="submit" value="提交订单">
</form>
#finishpay.blade.php
<h1>{{$msg}}</h1>