文档教程模拟:

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 "success";
}

自己示例: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 "success";
}

注:支付宝退款 时会访问 调用支付成功回调时的接口,所以会产生 数据库订单状态 修改不了的现象,处理办法是在 支付成功回调中 对订单进行状态判断,只有未支付的状态才可以修改订单为支付状态

并且在回调中,处理完后要按照文档上的 返回"success" ,不能自己胡乱写

例如:

/**
* 购买会议活动报名回调 支付宝 url()
* param ()
*/
public function notifyUrlMeetingAly(Request $request)
{
$data = $request->all();
$order_sid = $data['out_trade_no'];
$time_now = time(); //修改订单支付状态
$order = \DB::table('order')->where('order_sid',$order_sid)->first();
$order_status = $order->order_status;
if($order_status == 1){
\DB::table('order')->where('order_sid',$order_sid)->update(['order_status'=>2,'order_ptime' => $time_now]);
//修改用户报名关系表订单状态
\DB::table('morder')->where('morder_sid',$order_sid)->update(['morder_status'=>1]);
} return 'success';
}

laravel中生成支付宝 二维码 扫码支付的更多相关文章

  1. pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式

    利用pbfunc外部函数在Datawindow中直接生成QR二维码,非图片方式.需要注意以下面几点: Datawindow的DataObject的单位必须为像素(Pixels). Datawindow ...

  2. golang中生成读取二维码(skip2/go-qrcode和boombuler/barcode,tuotoo/qrcode)

     1 引言 在github上有好用golan二维码生成和读取库,两个生成二维码的qrcode库和一个读取qrcode库. skip2/go-qrcode生成二维码,github地址:https://g ...

  3. spring boot高性能实现二维码扫码登录(中)——Redis版

    前言 本打算用CountDownLatch来实现,但有个问题我没有考虑,就是当用户APP没有扫二维码的时候,线程会阻塞5分钟,这反而造成性能的下降.好吧,现在回归传统方式:前端ajax每隔1秒或2秒发 ...

  4. 二维码生成插件qrious及网站扫码登录的一些理解

    什么是二维码 ​ 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型. ...

  5. 利用WPF生成Q币充值二维码——扫码登录篇

    一.前言 虽然腾讯官方不支持使用二维码充值Q币,但对于喜欢钻研的人来说这不是问题,本文利用WPF技术讲解从扫码登录到生成Q币充值二维码的一整套解决方案. 因为充值Q币需要先用QQ号登录官网.所以我们首 ...

  6. spring boot高性能实现二维码扫码登录(上)——单服务器版

    前言 目前网页的主流登录方式是通过手机扫码二维码登录.我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查 ...

  7. spring boot高性能实现二维码扫码登录(下)——订阅与发布机制版

     前言 基于之前两篇(<spring boot高性能实现二维码扫码登录(上)——单服务器版>和<spring boot高性能实现二维码扫码登录(中)——Redis版>)的基础, ...

  8. 公司开发的APP,如何生成一个二维码,供客户下载使用

    1.其实和简单,因为一般的用户使用扫一扫,大多数都是用微信自带的扫一扫工具 而,微信打开的二维码页面,会自动屏蔽apk文件,所以显然把apk的url生成一个二维码,让用户扫一扫就能直接下载,这样是行不 ...

  9. 利用websocket实现微信二维码码扫码支付

    由于业务需要引入微信扫码支付,故利用websocket来实现消息推送技术. 实现大致流程:首先客户端点击微信支付按钮,触发微信支付接口,同时微信支付响应成功参数后,连接websocket客户端,此刻利 ...

随机推荐

  1. ubuntu如何使zsh替换bash

    答:  1.安装zsh sudo apt-get install zsh 2.zsh替换bash sudo chsh -s `which zsh` 3.重启 (注:重启后打开一个终端会自动进入zsh的 ...

  2. AngularJs 表单提交按钮状态

    表单属性: $invalid:未经过验证的表单,就是表单里面信息通过验证就为false,没有通过为true $valid:经过验证的表单,表单里信息验证通过为true,反之为false $dirty: ...

  3. mysql的隔离性和锁

    INNODB的隔离性质 INNODB的事务支持4种隔离机制,分别是 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, and SERIALIZABL ...

  4. 《WAP》第一次作业:团队亮相

    一.队名:WAP! 二.团队成员组长 组员 : 201571030302/杜有海 201571030327/乌勒扎 201571030304/郝明宇 201571030318/马麒 组长: 20157 ...

  5. 辗转相除法 & 裴蜀定理

    2018-03-11 17:39:22 一.辗转相除法 在数学中,辗转相除法,又称欧几里得算法(英语:Euclidean algorithm),是求最大公约数的算法.辗转相除法首次出现于欧几里得的&l ...

  6. 同样是搞Java,年薪15W和50W到底差在哪里?

    同样是搞Java,年薪15W和50W到底差在哪里? 一.总结 一句话总结: 学习 挑战 1.扩宽自己的眼界,学着从全局看待问题,并且勇于挑战别人眼中的难题 2.持续提升你的学习能力,虽然有很多人以「在 ...

  7. hdu3951巴什博弈变型

    参考博客:http://blog.csdn.net/sun897949163/article/details/50609070 特判一下m=1的情况,然后m!=1时,无论对手取多少,我只要取的让这条链 ...

  8. ubuntu下修改matlab R2016b的快捷键为windows下相同

    选为: windows默认类.

  9. 谈谈oracle里的join、left join、right join、full join-版本2

    --1.left join  左表为主表,左表返回全部数据,右表只返回与左表相匹配的数据select   t1.fpdm,t1.fphm ,t1.zjr,t1.zjsj,t1.zjjx,t1.zjje ...

  10. 动态创建OATipBean

    动态创建OATipBean. 动态创建的OATipBean无法直接设置提示内容,需要添加一个静态文本. 参考User Guide示例如下. If you need to create a tip pr ...