微信、百度、字节跳动等小程序公共类库封装

PHP技术
324
0
0
2022-04-22

开发了多次小程序,每次都要翻文档、找之前的项目复制过来,

费时费事,为了便于小程序的开发,干脆自己去造轮子,

整合小程序(微信、QQ、百度、字节跳动、支付宝)相关开发。

!!请先熟悉 相关小程序 说明文档!!请具有基本的 debug 能力!!

特点

  • 丰富的扩展,支持微信、QQ、百度、字节跳动、支付宝(待完善)小程序
  • 符合 PSR 标准,方便的与你的框架集成
  • 文件结构清晰,每个类单独封装扩展,便于单独使用

支持的小程序

1、微信(Wechat)

method 描述 openid 获取小程序 openid accessToken 获取 access_token send 微信小程序发送订阅消息 uniformSend 下发小程序和公众号统一的服务消息 qrcode 获取小程序码或小程序二维码,图片 Buffer decrypt 检验数据的真实性,并且获取解密后的明文

2、QQ(QQ)

method 描述 openid 获取小程序 openid accessToken 获取 access_token send 小程序发送订阅消息 qrcode 获取小程序二维码,图片 Buffer decrypt 检验数据的真实性,并且获取解密后的明文

3、百度(Baidu)

method 描述 openid 获取小程序 openid accessToken 获取 access_token send 小程序发送订阅消息 qrcode 获取小程序二维码,图片 Buffer decrypt 检验数据的真实性,并且获取解密后的明文

4、字节跳动(Bytedance)

method 描述 openid 获取小程序 openid accessToken 获取 access_token send 小程序发送订阅消息 qrcode 获取小程序二维码,图片 Buffer decrypt 检验数据的真实性,并且获取解密后的明文

5、支付宝(Alipay)

method 描述 token 获取小程序用户user_id及access_token send 小程序发送模板消息 qrcode 小程序推广码,链接地址

安装(GitHub

composer require fengkui/xcx

完善相关配置

# 微信小程序配置
$wechatConfig = [
    'appid' => '',
    'secret' => '',
];
# QQ小程序配置
$qqConfig = [
    'appid' => '',
    'secret' => '',
];
# 百度小程序配置
$baiduConfig = [
    'appid' => '',
    'appkey' => '',
    'secret' => '',
];
# 字节跳动小程序配置
$bytedanceConfig = [
    'appid' => '',
    'secret' => '',
];
# 支付宝小程序配置
$alipayConfig = [
    'app_id' => '', // 支付宝分配给开发者的应用ID
    'public_key' => '', // 请填写支付宝公钥
    'private_key' => '', // 请填写开发者私钥去头去尾去回车
];

使用说明

单独使用

$xcx = new \fengkui\Xcx\Wechat($wechatConfig); // 微信
$xcx = new \fengkui\Xcx\Qq($qqConfig); // QQ
$xcx = new \fengkui\Xcx\Baidu($baiduConfig); // 百度
$xcx = new \fengkui\Xcx\Bytedance($bytedanceConfig); // 字节跳动
$xcx = new \fengkui\Xcx\Alipay($alipayConfig); // 支付宝

公共使用

<?php
/**
 * @Author: [FENG] <1161634940@qq.com>
 * @Date:   2021-05-01T14:55:21+08:00
 * @Last Modified by:   [FENG] <1161634940@qq.com>
 * @Last Modified time: 2021-05-30 15:39:01
 */

require_once('./vendor/autoload.php');

/**
 * 通用小程序
 */
class Xcx
{
    // 小程序相关信息获取  
    protected static $xcx = '';
    // 小程序类型  
    protected static $type = '';
    // 小程序相关配置  
    protected static $config = [];

    /**
     * [_initialize 构造函数(获取小程序类型与初始化配置)]
     * @return [type] [description]
     */ 
    public function _initialize()
    {
        self::$type = $_GET['type'] ?? 'wechat';
        self::config();
    }

    /**
     * [config 获取配置]
     * @param  string $type [description]
     * @return [type]       [description]
     */ 
    protected static function config($type='')
    {
        $type = $type ?: self::$type;

        // 相关配置  
        $wechatConfig = [ 
            'appid' => '',
            'secret' => '',
        ];

        if (in_array($type, ['wechat', 'qq', 'baidu', 'bytedance', 'alipay'])) {
            $config = $type . "Config";
            self::$config = $$config;
        } else {
            die('当前类型配置不存在');
        }

        $type && self::$xcx =(new \fengkui\Xcx())::$type(self::$config);
    }

    /**
     * [fastLogin 获取openid,快速登录]
     * @return [type] [description]
     */ 
    public function fastLogin($code=null)
    {
        if(!$code)
            die('参数缺失');

        $data = self::$xcx->openid($code);
        if (empty($data['openid']))
            die('获取数据失败');
    }

    /**
     * [decrypt 检验数据的真实性,并且获取解密后的明文]
     */ 
    public function decrypt()
    {
        $sessionKey = ''; // session_key 随openid一起获取到的东东  
        $encryptedData = ''; // 加密的用户数据  
        $iv = ''; // 与用户数据一同返回的初始向量

        if(!$sessionKey || !$encryptedData || !$iv)
            die('参数缺失');

        $re = self::$xcx->decrypt($sessionKey, $encryptedData, $iv);
        if (!$re)
            die('获取数据失败');
    }

    /**
     * [send 发送模板消息]
     */ 
    public static function send()
    {
        $openid = $openid; // 用户openid  
        $template_id = ''; // 模板ID  
        $data = []; // 发送消息数据格式  
        $page = 'pages/index/index'; // 进入小程序页面

        $re = self::$xcx->send($openid, $template_id, $data, $page);
        if (!$re)
            die('获取数据失败');
    }

    /**
     * [qrcode 获取小程序码]
     */ 
    public static function qrcode()
    {
        $path = 'pages/index/index'; // 进入小程序页面  
        $width = 430; // 小程序码宽度 px (默认430)  
        $type = 2; // 获取类型 1:createwxaqrcode 2:getwxacode 3:getwxacodeunlimit  (默认2)  
        $is_hyaline = true; // 是否需要透明底色 (默认true)

        $re = self::$xcx->qrcode($path, $width, $type, $is_hyaline);
        if (!$re)
            die('获取数据失败');

        // file_put_contents('qrcode.png', $re); // 直接保存文件

        // 直接显示  
        $im = imagecreatefromstring($re);
        if ($im !== false) {
            header('Content-Type: image/png');
            imagepng($im);
            imagedestroy($im);
    }
}