文档教程模拟:
http://www.023xs.cn/Article/37/laravel5%E9%9B%86%E6%88%90%E6%94%AF%E4%BB%98%E5%AE%9Dalipay%E6%89%AB%E7%A0%81%E6%94%AF%E4%BB%98%E6%B5%81%E7%A8%8B%EF%BC%88Laravel%E6%94%AF%E4%BB%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%89
1、在对应的蚂蚁金服,申请【网页&移动应用】,将对应的应用上线,并签约【电脑网站支付】和【手机网站支付】
2、在项目中composer对应的包【项目里面的vendor/latrell包上传coding的话,需要复制本地后在上传】
3、按照文档修改对应的配置文件,其中各个支付的回调可以单独配置
4、生成对应的地址后,将地址使用二维码生成工具 生成二维码图片 返回即可
示例代码:
订单生成,提交订单代码示例:
public function ccsppUserDoVipOrderAlyPc(Request $request){ $data = $request->all(); $userId = $data[‘user_id‘]; $user = \DB::table(‘user‘) ->where(‘id‘,$userId) ->first(); //此处订单和支付一起生成 $money = 0.01; $order[‘order_uid‘] = $data[‘user_id‘]; $order[‘order_uname‘] = $user->user_name; $order[‘order_type‘] = 1; $order[‘order_time‘] = time(); $order[‘order_money‘] = $money; $order[‘order_status‘] = 1; $order[‘order_tel‘] = $user->user_tel; $order[‘order_sid‘] = str_random(4) .time(); \DB::beginTransaction(); // 创建订单 $res_order = \DB::table(‘order‘) ->insertGetId($order); if(!$res_order){ \DB::rollback(); \DB::commit(); return [‘code‘ => 1002, ‘data‘ => [‘message‘ => ‘订单生成失败!‘]]; } //生成支付宝的订单 $config = config(‘latrell-alipay-web‘); $alipay = app(‘alipay.web‘); $alipay->setOutTradeNo($order[‘order_sid‘]); $alipay->setTotalFee($order[‘order_money‘]); $alipay->setSubject(‘交易内容‘); $alipay->setBody(‘交易内容‘); $alipay->setNotifyUrl($config[‘notifyUrlJkAly‘]);//设置回调地址 $alipay->setQrPayMode(‘1‘); //该设置为可选1-5,添加该参数设置,支持二维码支付。 $basePath = base_path(); $basePath = $basePath."/public/uploads/code/"; $img_file = $basePath.‘aly‘.$order[‘order_sid‘].‘.png‘; $alcode = ‘aly‘.$order[‘order_sid‘].‘.png‘; $alycode = self::urlUsePic . $alcode; $abc = \QrCode::format(‘png‘)->size(200)->margin(0)->generate($alipay->getPayLink(),$img_file); // 跳转到支付页面。 $aliPayUrl = $alipay->getPayLink(); //订单生成后给订单生成对应的支付二维码 \DB::commit(); return [‘code‘ => 1000,‘alycode‘ => $alycode];}
回调配置代码示例:
latrell-alipay:
return [ //合作身份者id,以2088开头的16位纯数字。 ‘partner_id‘ => ‘208****12752‘, //卖家支付宝帐户。 ‘seller_id‘ => ‘g******l@da****.com‘];
latrell-alipay-web:
return [ // 安全检验码,以数字和字母组成的32位字符。 ‘key‘ => ‘bbpjx64******ggve61‘, //签名方式 ‘sign_type‘ => ‘MD5‘, // 服务器异步通知页面路径。支付1的回调 ‘notify_url‘ => ‘https://test/notify_url‘, // 服务器异步通知页面路径。支付2的回调 ‘notifyUrlJkAly‘ => ‘https://test/notifyUrlJkAly‘, // 服务器异步通知页面路径。支付3的回调 ‘notifyUrlVideoAly‘ => ‘https://test/notifyUrlVideoAly‘, // 服务器异步通知页面路径。支付4的回调(在订单生成时选择参数) ‘notifyUrlMeetingAly‘ => ‘https://test/notifyUrlMeetingAly‘, // 页面跳转同步通知页面路径。// ‘return_url‘ => ‘https://test/aliPayReturn‘ ‘return_url‘ => ‘‘];
回调路由单个代码示例:
官方示例:1
public function notify_url(Request $request){ // 验证请求。 if (!app(‘alipay.web‘)->verify()) { Log::notice(‘Alipay notify post data verification fail.‘, [ ‘data‘ => $request->instance()->getContent() ]); return ‘fail‘; } // 判断通知类型。 switch ($request ->input(‘trade_status‘,‘‘)) { case ‘TRADE_SUCCESS‘: case ‘TRADE_FINISHED‘: // TODO: 支付成功,取得订单号进行其它相关操作。 Log::debug(‘Alipay notify post data verification success.‘, [ ‘out_trade_no‘ => $request -> input(‘out_trade_no‘,‘‘), ‘trade_no‘ => $request -> input(‘trade_no‘,‘‘) ]); break; } $data = $request->all(); $time_now = time(); \DB::table(‘test‘)->where(‘id‘,1)->update([‘name‘=>$data[‘out_trade_no‘],‘time‘ => $time_now]); return true;}
自己示例:2 未验证
public function notifyUrlJkAly(Request $request){ $data = $request->all(); $order_sid = $data[‘out_trade_no‘]; $time_now = time(); //修改订单用户和状态 \DB::table(‘order‘)->where(‘order_sid‘,$order_sid)->update([‘order_status‘=>2,‘order_ptime‘ => $time_now]); //同时根据订单的类型修改用户的会员类型和 版本到期时间 默认加一年 $order_res = \DB::table(‘order‘)->where(‘order_sid‘,$order_sid)->first(); if($order_res){ //如果是版本支付订单,就修改用户的支付状态,和版本使用期限 $uid = $order_res->order_uid; $date = date(‘Y‘,$time_now) + 1 . ‘-‘ . date(‘m-d H:i:s‘);//一年后日期 $ytime = strtotime($date); $ress = \DB::table(‘user‘)->where(‘id‘,$uid)->update([‘user_type‘ => 2,‘user_btime‘ => $time_now,‘user_etime‘ => $ytime]); } return true;}
原文地址:https://www.cnblogs.com/lvfish/p/10430828.html
时间: 2024-08-30 13:22:29