laravel 对接支付宝当面付扫码支付
未知
2019-11-18 09:35:30
0

第一步 开发中心>网页&移动应用下支付接入

早呢

第二步  创建应用后需添加可支付的方式

功能

 

第三步  配置公钥与私钥

公钥

 

工具下载地址   

Windows :http://p.tb.cn/rmsportal_6680_secret_key_tools_RSA_win.zip

Mac:http://p.tb.cn/rmsportal_6680_secret_key_tools_RSA_macosx.zip

 

第四步  在创建新应用中把工具刚刚生成的公钥,设置应用公钥(下图已经设置,所以为查看,设置成功会自动出现查看支付宝公钥,同时支付宝公钥是需要在项目config文件需要用到的,千万不要弄错)

开发设置

第五步  composer require yansongda/laravel-pay     支付组件

第六步  composer require simplesoftwareio/simple-qrcode    二维码生成器

第七步  laravel 配置文件    /config 目录下新建 alipay.php 文件 写入以下内容

 

		<?php

		return [

		    'pay'=>[

		        'app_id'=>'',
                               // 支付宝 支付成功后 主动通知商户服务器地址  注意 是post请求。服务器异步通知页面路径,根据自己项目路径做相应的修改。外网可访问的地址,本地不跳转
                               'notify_url' => 'http://jinghuajuanke.cn/api/home/ali_pay_ntify',
                              // 支付宝 支付成功后 回调页面 get//页面跳转同步通知页面路径。
                              'return_url' => 'http://jinghuajuanke.cn/#/pay_success',

		       

		        //支付宝公钥

		        'ali_public_key'=>'',

		        //商家应用私钥

		        'private_key'=>'',

		        

		        'log'=>[

		            'file'=>'../storage/logs/alipay.log',

		            'level'=>'info',//建设生产环境下info,开发环境下debug

		            'type'=>'single',//optional 可选daily

		            'max_file'=>30 //optional 当type是daily时有效,默认是30天

		        ],

		        'http'=>[

		            'timeout'=>5.0,

		            'connect_timeout'=>5.0,

		        ]

		    ]

		]

		?>

 

第八步  控制器。

 

		<?php
		namespace App\Http\Controllers\Admin;
		use App\Http\Controllers\Controller;
                use App\Services\OrderService;
		use Illuminate\Http\Request;
		use Yansongda\Pay\Pay;
		use Yansongda\Pay\Log;
		use SimpleSoftwareIO\QrCode\Facades\QrCode;
		use Illuminate\Support\Facades\DB;

		class AlipaysController extends Controller

		{

                       // 手机网页支付接口
    public function aliPay(Request $request)
    {
        $aliPayOrder = [
            'out_trade_no' => time(),
            'total_amount' => $order->total_amount, // 支付金额
            'subject'      => $request->subject ?? '支付宝手机网页支付' // 备注
        ];

        $config = config('alipay.pay');

        $config['return_url'] = $config['return_url'].'?id='.$request->id;

        $config['notify_url'] = $config['notify_url'].'?id='.$request->id;

        return Pay::alipay($config)->wap($aliPayOrder);
    }
// app支付接口
    public function aliPayApp(Request $request)
    {
        $aliPayOrder = [
            'out_trade_no' => time(),
            'total_amount' => $order->total_amount, // 支付金额
            'subject'      => $request->subject ?? '默认' // 备注
        ];

        $config = config('alipay.pay');

        $config['return_url'] = $config['return_url'].'?id='.$request->id;

        return Pay::alipay($config)->app($aliPayOrder);
    }
                       // 支付宝扫码支付 当面付
		    public function alipay(Request $req){

		        $aliPayOrder=[

		            'out_trade_no'=>time(),

		            'total_amount'=>'0.01',//支付金额

		            'subject'=> $req->subject ?? '扫码支付' //备注

		        ];

		        $config=config('alipay.pay');

		        $config['return_url']=$config['return_url'].'?order_guid='.$req->order_guid;

		        $scan =Pay::alipay($config)->scan($aliPayOrder);

		        if(empty($scan->code) || $scan->code !=='10000' ) return false;

		        $url=$scan->qr_code.'?order_guid='.$req->order_guid;

		        //生成二维码 order_guid是订单编号 subject是显示支付说明

		        return QrCode::encoding('UTF-8')->size(300)->generate($url);

		    }
     // 支付成功后 支付宝服务通知本项目服务器
    // post 请求
    // 这里只是大概写一下逻辑,具体的安全防护 自己再去做限制
    public function aliPayNtify(Request $request, OrderService $orderService)
    {
        $order = Order::find($request->id);
        // 更新自己项目 订单状态
        if(!empty($order))  $orderService->payOrder($order);
    }

    // 支付宝退款
    public function aliPayRefund(Request $request)
    {
        try {
            $payOrder = [
                'out_trade_no' => $order->out_trade_no, // 商家订单号
                'refund_amount' => $order->total_amount, // 退款金额  不得超过该订单总金额
                 'out_request_no' => Common::getUuid() // 同一笔交易多次退款标识(部分退款标识)
            ];

            $config = config('alipay.pay');

            // 返回状态码 code 10000 成功
            $result = Pay::alipay($config)->refund($payOrder);
            if (empty($result->code) || $result->code !== '10000') throw new \Exception('请求支付宝退款接口失败');
            // 订单改为 已退款状态
            // ~~自己商城的订单状态修改逻辑
        } catch (\Exception $exception) {
            \Log::error($exception->getMessage());
            return false;
        }
    }

		}


		?>

	

 

 

第九步  以前的坑(勿踩)

treeeeeeeeeeeeeeeee

 

再停止使用沙箱功能,用正式账号时,请注释掉此配置

注意:
1,当出现这个错误时:

cURL error 60: SSL certificate problem: unable to get local issuer certifica

点击文章查看解决办法。
2,当出现这个问题

The Process class relies on proc_open, which is not available on your PHP installation

在php.ini中找到这两个删除掉。然后重启apache
佣兵


扫码时,通过判断浏览器,是微信还是支付宝

    //判断是不是微信
    if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
        return "微信支付的逻辑";
    }
    //判断是不是支付宝
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'AlipayClient') !== false) {
        return "支付宝支付的逻辑";
    }

相关内容

淘宝购物优惠券,省钱又省时...
本文详述了淘宝购物优惠券的来源、使用方法及好处,强调其省钱省时、提...
2024-11-20 13:00:41
宝塔安装node.js及n...
安装完成后使用终端命令:node -v是不显示的。还需要下一步,选...
2024-05-22 15:42:35
伪静态/nginx主配置/...
伪静态/nginx主配置/vhost/文件已经存在全局反向代理 宝...
2023-12-01 09:31:55
composer下载微信支...
第1:验证是否正确,如下命令:composer exec -l ,...
2023-10-19 16:15:50
tp5 composer ...
问题: 正常使用中的tp5程序需要安装微信支付v3。 tp5使用c...
2023-10-19 16:08:33
tp5 支付宝电脑网页支付...
支付宝电脑网页支付 写一个类把支付、退款、查询都放在一起 ?php...
2023-10-18 10:06:08

热门资讯

tp5 jquery判断手机端... application--common.php中添加如下代码 //函数作用是判断用户打开的是手机端还...
Laravel 5.5 .No... 创建了新的laravel项目后, 运行提示:No application encryption ke...
php 打印date函数出现错... 问题描述: 我使用的是phpstudy,在练习时间函数的时候,打印出现在的时间,date(Y-m-d...
生成随机字符唯一标识符guid... /** * @param $length * @return string * 生成随机字符串 */...
layui缩略图 div class=layui-form-item label class=layui-form-l...
php函数substr_rep... php函数substr_replace从某个位置替换或删除或插入字符串
Laravel 引入自定义类库... 强烈建议引入的类 都是含有命名空间的,这样使用起来就不会出现重名的情况。!!当然,没有命名空间也可以...
object json转化为数... //调用api 程序,通知商户订单异常 20200314 public function callt...
Laravel 查看SQL操作... 方法一:临时打印操作记录 DB::connection()-enableQueryLog(); # ...
php银行开放平台接口:pfx... 问题描述: 对接易通银行,他们的服务开放平台是java开发,而我的是php,现在需要php版本的SD...