TP5 封装通用的微信服务类

news2024/9/19 10:48:01

1、安装依赖包

我们这里用的是 EasyWeChat

EasyWeCha官网 https://www.easywechat.com/
安装地址 https://github.com/easywechat/docs
相关文档 https://www.easywechat.com/docs/4.1/payment/index

  • composer安装
$ composer require overtrue/wechat:~4.0 -vvv

1、封装服务类

<?php

namespace app\common\service;
use EasyWeChat\Factory;
use EasyWeChat\MiniProgram\Application;
use think\Hook;

/**
 * 微信服务
 * @package app\common\service
 */
class WeChatService
{

    //微信公众号配置
    private $officeConfig = [
        'app_id' => 'wx727ac3b3f4439a25',
        'secret' => '23471aaeb7d0ab3679da9f9a7d58bb25',
        // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
        'response_type' => 'array',
        //...
    ];

    //微信支付
    private $payConfig = [
        // 必要配置
        'app_id' => 'xxxx',
        'mch_id' => 'your-mch-id',
        'key' => 'key-for-signature',   // API 密钥

        // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
        'cert_path' => 'path/to/your/cert.pem', // XXX: 绝对路径!!!!
        'key_path' => 'path/to/your/key',      // XXX: 绝对路径!!!!

        'notify_url' => '默认的订单回调地址',     // 你也可以在下单时单独设置来想覆盖它
    ];

    //微信小程序配置
    private $miniConfig = [
        'app_id' => 'wx3cf0f39249eb0exx',
        'secret' => 'f1c242f4f28f735d4687abb469072axx',

        // 下面为可选项
        // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
        'response_type' => 'array',

        'log' => [
            'level' => 'debug',
            'file' => PUBLIC_PATH . '/logs/wechat.log',
        ],
    ];

    //开放平台配置
    private $openConfig = [
        'app_id' => '开放平台第三方平台 APPID',
        'secret' => '开放平台第三方平台 Secret',
        'token' => '开放平台第三方平台 Token',
        'aes_key' => '开放平台第三方平台 AES Key'
    ];

    private $token = ''; //获取小程序的ACCESS_TOKEN
    private $isContract = false; //是否开启支付中签约

    /**
     * @ApiTitle    (实例化)
     * @param int $type
     * @return bool|Application|\EasyWeChat\OfficialAccount\Application|\EasyWeChat\OpenPlatform\Application|\EasyWeChat\Payment\Application
     * @throws \EasyWeChat\Kernel\Exceptions\HttpException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException
     * @throws \Psr\SimpleCache\InvalidArgumentException
     */
    public function connect($type = 0)
    {
        //实例化对象
        if ($type == 0) $app = Factory::miniProgram($this->miniConfig); //微信小程序
        if ($type == 1) $app = Factory::officialAccount($this->officeConfig); //微信公众号
        if ($type == 2) $app = Factory::payment($this->payConfig); //微信支付
        if ($type == 3) $app = Factory::openPlatform($this->payConfig); //微信开放平台

        //获取token
        $accessToken = $app->access_token;
        $this->token = $accessToken->getToken()['access_token']; // token 数组  token['access_token'] 字符串

        return $app ?? false;
    }

    /**
     * @ApiTitle    (生成小程序二维码)
     * @return bool|int
     * @throws \EasyWeChat\Kernel\Exceptions\HttpException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException
     * @throws \Psr\SimpleCache\InvalidArgumentException
     */
    public function createCode()
    {
        $app = $this->connect(0);

        $response = $app->app_code->getUnlimit('scene-value', [
            'page' => 'path/to/page',
            'width' => 600,
        ]);

        if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
            $dir = 'qrCode/' . date('Ymd', time()) . '/';
            if (!file_exists($dir)) mkdir($dir, 0777, true);
            $url = PUBLIC_PATH . $dir . 'app_mini_code.png';
            $response->save($url);

            //保存到OSS
            $urlOss = Hook::listen("upload_oss", $url, null, true);

            //删除本地图片和文件夹
            if (file_exists($url)) {
                unlink($url);
                rmdir($dir);
            }
        }
        return $urlOss ?? false;
    }

}

其中微信小程序、公众号、微信支付和开放平台等配置都在这里面写,如果需要企业微信等配置自行根据自己的业务修改里面的代码即可。

3、调用服务类

  • 我们只要 new 一个服务类就可以使用里面的方法了
public function createWeChatCode()
{
    $code = (new WeChatService)->createCode();
    $this->success('生成小程序码成功', $code);
}
  • 调用 EasyWeChat 包的方法,只需要 connect 一下就可以了,其中需要传参
$app = (new WeChatService())->connect(1);

感谢你的观看,如果有什么问题欢迎在留言区留言。

最后编辑于:2020-05-08 15:54


喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matlab R2016b安装cplex12.6,测试时cplex出现出现内部错误的解决方法

问题场景 网上搜索matlabyalmipcplex的安装教程&#xff0c;跟着步骤操作即可&#xff0c;假如都安装好了&#xff0c;在matlab中测试安装是否成功&#xff0c;出现以下问题&#xff1a; 1、matlab中设置路径中添加了yalmip和cplex路径&#xff0c;在命令窗口中输入yalmiptest…

[Flask笔记]一个完整的Flask程序

前面讲过Flask是一个轻量级Web开发框架&#xff0c;为什么说是轻量级的呢&#xff0c;因为它用短短几行代码就能运行起来&#xff0c;我们一起来看看最简单的flask框架。 安装Flask 在看Flask框架之前我们需要先安装flask模块&#xff0c;学过python的肯定都知道&#xff0c;…

python3读取shp数据

目录 1 介绍 1 介绍 需要tmp.shp文件和tmp.dbf文件&#xff0c;需要安装geopandas第三方库&#xff0c;python3代码如下&#xff0c; import geopandas as gpdshp_file_path "tmp.shp" shp_data gpd.read_file(shp_file_path) for index, row in shp_data.iterro…

久期分析与久期模型

目录 一、久期分析的理论原理 二、数据准备 三、Stata 程序代码及解释 四、代码运行结果 一、久期分析的理论原理 久期&#xff08;Duration&#xff09;是衡量债券价格对利率变动敏感性的重要指标。它不仅仅是一个简单的时间概念&#xff0c;更是反映了债券现金流回收的平均…

最新 Kubernetes 集群部署 + Contranerd容器运行时 + flannel 网络插件(保姆级教程,最新 K8S 1.28.2 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

BGP第三日谈

今日所用拓扑 先补充昨日没有讲到的知识点&#xff1a; 1.IBGP有更新源检测机制 这种机制使得BGP路由在IBGP邻居间传递时下一跳地址仍然保持不变&#xff0c;但是IBGP却没有去往下一跳地址的路由&#xff0c;所以我们需要手动将IBGP邻居间传递的BGP路由下一跳地址转成与IBGP…

星辰考古:TiDB v4.0 进化前夜

前情回顾TiDB v4 时间线TiDB v4 新特性 TiDBTiKVPDTiFlashTiCDCTiDB v4 兼容性变化 TiDBTiKVPD其他TiDB 社区互助升级活动TiDB 3.0.20 升级到 4.0.16 注意事项升级速览直观变化总结素材来源&#x1f33b; 往期精彩 ▼ 前情回顾 在前面的章节中&#xff0c;我们共同梳理了 TiDB …

【ARM】CCI缓存一致性整理

目录 1.CCI500提供的功能 2.CCI500在SOC系统中所处的位置​编辑 3.CCI500内部结构​编辑 4.功能描述 1.CCI500提供的功能 2.CCI500在SOC系统中所处的位置 3.CCI500内部结构 Transaction Tracker&#xff08;TT&#xff09;是用来解决一致性和ordering问题的&#xff0c;它…

光伏仿真系统推荐

在全球能源转型和绿色能源发展的背景下&#xff0c;光伏行业作为重要的绿色能源组成部分&#xff0c;其智能化、数字化的发展显得尤为关键。光伏仿真系统作为提升光伏项目设计、运维效率的重要工具&#xff0c;在行业中扮演着不可或缺的角色。在众多光伏仿真系统中&#xff0c;…

构建工具webpackvite

1. webpack 使用步骤: 1.初始化项目yarn init -y&#xff08;也可以是npm其他包管理工具&#xff09; 2.安装依赖webpack webpack-cli&#xff1a;yarn add -D webpack webpack-cli&#xff08;-D是只用于开发时候加&#xff09; 3.在项目中创建src目录&#xff0c;然后编写代…

mov视频怎么改成mp4?把mov改成MP4的四个方法

mov视频怎么改成mp4&#xff1f;选择合适的视频格式对于确保内容质量和流通性至关重要。尽管苹果公司的mov格式因其出色的视频表现备受赞誉&#xff0c;但在某些情况下&#xff0c;它并非最佳选择&#xff0c;因为使用mov格式可能面临一些挑战。MP4格式在各种设备&#xff08;如…

Suricata引擎二次开发之命中规则定位

二开背景 suricata是一款高性能的开源网络入侵检测防御引擎&#xff0c;旨在检测、预防和应对网络中的恶意活动和攻击。suricata引擎使用多线程技术&#xff0c;能够快速、准确地分析网络流量并识别潜在的安全威胁&#xff0c;是众多IDS和IPS厂商的底层规则检测模块。 前段时间…

Python精神病算法和自我认知异类数学模型

&#x1f3af;要点 &#x1f3af;空间不确定性和动态相互作用自我认知异类模型 | &#x1f3af;精神病神经元算法推理 | &#x1f3af;集体信念催化个人行动力数学模型 | &#x1f3af;物种基因进化关系网络算法 | &#x1f3af;电路噪声低功耗容错解码算法 &#x1f4dc;和-…

下载设计免抠元素,就上这6个网站,免费下载!

寻找免费PNG免抠素材网站是创意设计者们探索的重要一环。这些网站提供了丰富的PNG格式素材&#xff0c;去除了背景&#xff0c;方便在不同项目中使用。精心挑选了6个免费PNG免抠素材网站&#xff0c;它们提供了高品质的素材资源&#xff0c;无论是个人设计还是商业项目&#xf…

Jetson-AGX-Orin 非docker环境源码编译安装CyberRT

Jetson-AGX-Orin 非docker环境源码编译安装CyberRT 1、安装依赖 sudo apt update sudo apt-get install g gdb gcc cmake sudo apt install libpoco-dev uuid-dev libncurses5-dev python3-dev python3-pip python3 -m pip install protobuf3.14.02、下载CyberRT源码 git cl…

从0开始的STM32HAL库学习4

对射式红外传感器计数复现 配置工程 我们直接复制oled的工程&#xff0c;但是要重命名。 将PB14设置为中断引脚 自定义命名为sensorcount 设置为上升沿触发 打开中断 配置NVCI 都为默认就可以了 修改代码 修改stm32f1xx_it.c 文件 找到中断函数并修改 void EXTI15_10_I…

mp3文件导入音乐乱码

在网上下载了beyond的mp3文件&#xff0c;发现看起来没问题&#xff0c;一旦加入到音乐软件就会乱码&#xff0c;看起来说因为音乐文件加载到元数据 思路参考了这个文章 解决Mac电脑音乐显示歌名的乱码问题_音频文件乱码-CSDN博客 不过这个只能解决名称乱码&#xff0c;我发…

Kodcloud可道云安装与一键发布上线实现远程访问详细教程

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云&#xff0c;…

前端新手小白的React入坑指南

有个小伙伴跟我说&#xff0c;已经毕业了&#xff0c;开始实习了。但公司现在用的还是Vue&#xff0c;领导说是过段时间让他用React做项目&#xff0c;先自己学习起来。 我给他找了一些文档&#xff0c;顺便着呢&#xff0c;反正自己也写博客&#xff0c;自己也写一份吧&#x…

共集电极放大器+共基极放大器+放大器参数总结+单片机(全局/静态/动态变量+LED点阵初识+点亮LED并显示图形)

2024-7-11&#xff0c;星期四&#xff0c;18:38&#xff0c;天气&#xff1a;雨&#xff0c;心情&#xff1a;晴。终于下雨了&#xff0c;感受到了久违的凉爽&#xff0c;没有什么特殊的事情发生&#xff0c;继续学习啦&#xff0c;加油加油&#xff01;&#xff01;&#xff0…