laravel 框架接入第三方扫码支付(万众云平台)
2018-01-11 13:11
453 查看
首先在控制器拿到方法,去请求第三方的扫码支付接口
public function json_post($url, $data){
$ch = curl_init();
$header = [
'Accept-Charset: utf-8',
'Content-Type: application/json'
];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
$errorno=curl_errno($ch);
return $tmpInfo;
}
city.php文件内容
注意放到充值的页面
//去充值的界面 public function recharge(Request $request){ $data['money']=$request->input('money');//钱数 $data['order_id']=$request->input('order_id');//订单号 $data['card_num']=$request->input('card_num');//元宝数量 $data['username']=$request->session()->get("username");//用户昵称 $url = 'http://epay.taidupay.com/api/pay/unifiedOrder'; $key = '';//平台申请的app_key $datas = [ 'appId' =>'',//平台申请的app_id 'timestamp' => (string)time(), 'nonce' => time().rand(), 'service' => 'alipay.native', 'orderNo' => $data['order_id'], 'totalAmount' =>1, 'clientIp' => '116.62.214.81', 'attach' => 'ces', 'notifyUrl' => 'http://116.62.214.81/city.php',//异步回调地址(必须是外网访问到的地址) 'body' => '元宝', ]; ksort($datas); $signOStr = ''; foreach ($datas as $k => $val) { if ($signOStr != '') { $signOStr .= '&'; } $signOStr .= $k . '=' . $val; } $signOStr = $signOStr . '&key=' . $key; $datas['sign'] = strtoupper(MD5($signOStr)); $data['rs'] = json_decode($this->json_post($url, json_encode($datas)), true); //print_r($data['rs']);die; if($data['rs']['success'] == true && $data['rs']['status'] == 0){ echo json_decode($data['rs']['payInfo'], true); }else{ echo "<script> alert('订单编号重复!');parent.location.href='http://116.62.214.81/userInfo'; </script>"; } return view('recharge')->with('data', $data); }
public function json_post($url, $data){
$ch = curl_init();
$header = [
'Accept-Charset: utf-8',
'Content-Type: application/json'
];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
$errorno=curl_errno($ch);
return $tmpInfo;
}
city.php文件内容
<?php header("Content-type:text/html;charset=utf-8"); $get_data = file_get_contents('php://input', 'r'); //file_put_contents('a.txt',$get_data); $get_data = json_decode($get_data, true); $key = '1bdc6c80b3cb8987e2720bd965748593f07bb3e9'; $data = $get_data; unset($data['sign']); ksort($data); $signOStr = ''; foreach ($data as $k => $val) { if ($signOStr != '') { $signOStr .= '&'; } $signOStr .= $k . '=' . $val; } $signOStr = $signOStr . '&key=' . $key; $sign = strtoupper(MD5($signOStr)); if($sign == $get_data['sign'] && $data['status'] == 3){ $dbms='mysql';//数据库类型 $dbName='youleapp';//使用的数据库 $users='root';//数据库连接用户名 $pwd='root';//数据库连接密码 $host='127.0.0.1';//数据库主机名 $dsn="$dbms:host=$host;port=3306;dbname=$dbName"; $pdo=new PDO($dsn,$users,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo //成功 $out_trade_no=$data['orderNo'];//订单号 $trade_no=$data['platformOrderNo']; $pay_time=$data['finishTime']; //通过订单号修改订单id $updatesql="UPDATE pay_order set trade_no='$trade_no',pay_time='$pay_time',status=1 WHERE order_id='$out_trade_no'"; $res=$pdo->exec($updatesql); if($res==1){ //修改完状态之后要给用户加上元宝 //$order_user=$model_payorder->getorder($out_trade_no); //查询修改完订单的信息 $query1="select * from `pay_order` where order_id='$out_trade_no'";//需要执行的sql语句 $res1=$pdo->prepare($query1);//准备查询语句 $res1->execute();// $arr=$res1->fetch(PDO::FETCH_ASSOC); $uid=$arr['uid'];//用户的id $querys="select * from `user` where id='$uid'";//需要执行的sql语句 $res2=$pdo->prepare($querys);//准备查询语句 $res2->execute();// $user=$res2->fetch(PDO::FETCH_ASSOC); $acer_money=$user['acer_money']; $card_num=$arr['card_num']; $updatesq="UPDATE `user` set acer_money='$acer_money'+'$card_num' WHERE id='$uid'"; $result=$pdo->exec($updatesq); if($result==1){ echo "success"; } }else{ echo "fail"; } }else{ echo "fail"; }这就完成了。还有一个问题就是 扫码之后,页面跳转问题,别着急,小姐姐会一一给你解答。
注意放到充值的页面
$(document).ready(function () { setInterval("ajaxstatus()", 17000); }); function ajaxstatus() { var order_id=$("#out_trade_no").val(); //alert(order_id); if ($("#out_trade_no").val() != 0) { $.ajax({ url: "pay/order", type: "GET", dataType:'jsonp', async: false, data: {order_id:order_id}, success: function(msg) { if(msg.status == 1) { //注册成功调到登录页面 window.location.href = "/userInfo"; } else { layer.msg('请求订单状态出错!', {icon: 7, time: 2000}); return false; } } }); } }
ajax请求的地址pay/order控制器操作
//跳转页面 public function paysorder(Request $request){ $order_id=$request->input('order_id',''); $callback=$_GET['callback']; $model_payorder=new PayOrder(); $info=$model_payorder->getorder($order_id); if($info){ $response = array( 'state' => 200, 'message' => '成功', 'order_id' => $info['order_id'], 'status' => $info['status'], ); exit( $callback.'('.json_encode($response).')'); }else{ $response = array( 'state' => 202, ); exit( $callback.'('.json_encode($response).')'); } }
相关文章推荐
- laravel 框架接入第三方扫码支付(万众云平台)
- laravel 框架接入第三方支付宝扫码支付(万众云平台)
- laravel5.4框架微信,支付宝等支付和退款使用第三方插件Omnipay
- 电商平台接入第三方支付接口之微信支付接入订单系统
- 央行超级网银8月上线 第三方支付平台或暂停接入
- 央行超级网银8月上线 第三方支付平台或暂停接入
- 第三方支付平台-框架介绍
- 打造统一第三方SDK接入框架(用户模块,支付模块,发享模块)(一)
- IOS接入第三方付钱啦支付平台
- 第三方支付平台-框架介绍
- Laravel框架接入短信平台进行用户注册短信验证
- laravel框架下的pc支付宝支付接入
- 第三方支付平台:银联在线支付
- iOS 平台 Cocos2d-x 项目 接入第三方SDK 的坑(就是静态库接入的问题)
- 第三方支付平台业务分析
- 第三方支付程序 点卡api支付程序 点卡消耗平台 支持多家接口源码
- 第三方支付平台的状态表
- Android 支付宝支付、微信支付、银联支付 整合第三方支付接入方法(后台订单支付API设计)
- unity android项目如何快速接入平台支付的SDK
- 第三方支付平台:BeeCloud和Ping++对比