文档章节

laravel 微信支付

vio小黑
 vio小黑
发布于 2018/10/16 18:13
字数 642
阅读 42
收藏 0

1.composer加载laravel微信支付第三方文件

composer require "overtrue/laravel-wechat:~4.0"

composer require simplesoftwareio/simple-qrcode 1.3.*  //composer生成二维码文件

 

2.改config\app.php文件
'providers' => [
    // ...
    Overtrue\LaravelWeChat\ServiceProvider::class,
],
'aliases' => [
    // ...
    'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class,
],

在 config/app.php 注册 ServiceProvider 和 Facade (Laravel 5.5 无需手动注册)

 

3.写微信支付控制器

<?php

namespace App\Http\Api;


use App\Model\Order;
use App\Model\OrderGoods;
use EasyWeChat\Factory;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redirect;
use SimpleSoftwareIO\QrCode\Facades\QrCode;


class WeChatController extends Controller
{
    //
    private function get()
    {
        $config = [
            'app_id' => 'your app_id',
            'mch_id' => 'your mch_id',
            'key' => 'your key',
            // 'token' => 'TestToken',
            //'response_type' => 'array',
            //'notify_url' => '',
            // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
            //'cert_path'          => 'path/to/your/cert.pem', // XXX: 绝对路径!!!!
            //'key_path'           => 'path/to/your/key',      // XXX: 绝对路径!!!!
            'log' => [
                'level' => 'debug',
               'permission' => 0777,
                'file' => base_path().'\wechat.log',
            ],
        ];
        //$app = app('wechat.payment');
        $app = Factory::payment($config);
        return $app;
    }

    public function code(Request $request)
    {

        $app = $this->get();

       //dd(unserialize(file_get_contents(base_path().'\massage.txt')));
//        $order = Order::find($request->order_id);
        //dd($app->order->queryByOutTradeNumber($order->sn));
        $result = $app->order->unify([
            'body' => '购买产品',
           'out_trade_no' => 's545a64',//$order->sn,
           // 'total_fee' => $order->total_price*100,
            'total_fee' => 0.01*100,
            //'spbill_create_ip' => '127.0.0.1', // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
            'notify_url' => 'http://9a58e240.ngrok.io/api/success', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
            //'notify_url' => 'http://www.yzyp.com/api/success', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
            'trade_type' => 'NATIVE', // 请对应换成你的支付方式对应的值类型
            'product_id' => 'wx4706a9fcbbca10f2',
            //'openid' => 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o',
        ]);
        if($result['result_code'] === 'FAIL'){
            return [
                'code'=>0,
                'message'=>$result['err_code_des'],
            ];
        }
        if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
            $re = QrCode::format('svg')->size(100)->errorCorrection("L")->generate($result['code_url']);
            return $re;
        }
    }


    public function success()
    {
        $app = $this->get();
        $response = $app->handlePaidNotify(function($message, $fail) use($app){
            //判断订单状态
            $order = Order::where('sn',$message['out_trade_no'])->first();
            if(!$order || $order->status ==1){
                return true;
              }
              //判断用户支付状态
            if ($message['return_code'] === 'SUCCESS') {
                // 用户是否支付成功
                if ($message['result_code'] === 'SUCCESS') {
                    //修改订单状态
                    $order->update([
                        'status' => 1,
                    ]);
                }
            } else {
                return $fail('通信失败,请稍后再通知我');
            }
            return true;
;        });
        return $response;
    }


    public function test()
    {
        $message = unserialize(file_get_contents(base_path().'\massage.txt'));
        file_put_contents(storage_path().'\logs\WeChat.txt',serialize($message).PHP_EOL,FILE_APPEND);

    }

}

4.调用code接口

 

PS:错误一

GuzzleHttp \ Exception \ RequestException
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

回答:这是由于是在本地测试,不是安全路径,所以需要添加文件cacert.pem到WWW同级目录,

     例:如果使用的是phpstudy,则目录为phpStudy\PHPTutorial\cacert.pem

在php.ini中任意位置添加    curl.cainfo = "D:\phpStudy\PHPTutorial\cacert.pem"

重启phpStudy,访问code接口,扫码完成支付

© 著作权归作者所有

共有 人打赏支持
上一篇: laravel删除图片
下一篇: laravel 微信支付
vio小黑
粉丝 0
博文 42
码字总数 21401
作品 0
成都
私信 提问
Notadd v1.0-Beta6 fix3 发布——基于 Laravel 的模块化开发框架

Notadd v1.0-Beta6 fix3 发布了,详细的改进内容包括: 修复&优化 合并 static 与 public 目录,与 laravel 相同。 修复 mac 下因系统信息显示导致无法登陆后台的 BUG 修复 windows 下显示乱...

左华栋
2017/11/27
582
0
laravel-ebank 发布1.0.1正式版,可投入生产环境使用

laravel-ebank 电商类虚拟积分与聚合支付通用解决方案 项目功能基本满足使用,并流畅运行,持续更新中,如有使用方式问题可在QQ群里@群主 现已加入豪华午餐 推荐中小型项目使用 此项目功能已...

yybawang
2018/07/03
0
0
lumen PHP7 APP支付 原生微信支付 微信异步回调问题

用的lumen写的接口,APP支付。 PHP 7 。微信支付。按照微信官网文档写的。能正常生成prepayid给客户端,但是客户端支付成功后,微信异步回调接口一直没有接收到数据。网上查了好多原因: 1、...

努力的C
2018/06/29
0
0
laravel-ebank 基于电商的聚合支付和虚拟积分解决方案

laravel-ebank 项目功能基本满足使用,并流畅运行,持续更新中,如有使用方式问题可在QQ群里@群主 现已加入豪华午餐 推荐中小型项目使用 此项目功能已完成全部代码并满足基本需求(已服务三家...

yybawang
2018/07/03
0
0
Notadd Beta5_fix1 优化性能,支持树莓派安装

修复&优化 添加底层缓存机制,优化并提升性能(约 5 倍) 修复安装检测 public 及 pdo_mysql 问题 修复模块和插件加载的问题 修复树莓派下不能正常安装的问题 后台添加 Redis 版本的显示 后台...

左华栋
2017/09/28
658
10

没有更多内容

加载失败,请刷新页面

加载更多

MongoDB

关于MongoDb 1、MongoDB是一个开源的、基于分布式的、面向文档存储的非关系型数据库。 2、是非关系型数据库当中功能最丰富、最像关系数据库的。 3、由C++编写, MongoDB可以运行在Windows、u...

谢思华
27分钟前
3
0
Node.js 进程平滑离场剖析

本文由云+社区发表 作者:草小灰 使用 Node.js 搭建 HTTP Server 已是司空见惯的事。在生产环境中,Node 进程平滑重启直接关系到服务的可靠性,它的重要性不容我们忽视。既然是平滑重启,就涉...

腾讯云加社区
34分钟前
1
0
druid等 olap框架对比分析

简介 Druid 是一个开源的,分布式的,列存储的,适用于实时数据分析的存储系统,能够快速聚合、灵活过滤、毫秒级查询、和低延迟数据导入。 Druid在设计时充分考虑到了高可用性,各种节点挂掉...

hblt-j
35分钟前
1
0
Idea 禁用代码重复等警告

在相应方法上添加注解 @SuppressWarnings("action") @Transactional@SuppressWarnings("Duplicates")public void analyzeDpBook(DpBook dpBook) { EpubBook _epubBook = epubBookSe......

lemos
38分钟前
1
0
MaxCompute studio与权限那些事儿

背景知识 MaxCompute拥有一套强大的安全体系,来保护项目空间里的数据安全。用户在使用MaxCompute时,应理解权限的一些基本概念: 权限可分解为三要素,即主体(用户账号或角色),客体(表/...

阿里云官方博客
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部