发布一个简单Composer项目,微信加密解密工具包

简介

  • 为了管理和今后使用,我们需要将一些常用的类库打包到composer 上,这样之后就比较方便了,本文介绍如何建立一个composer 的类库。
  • 代码包,我们使用 https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Message_Encryption/Technical_Plan.html 中的事例代码。
  • 下载地址: https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip
  • 下载后截取php 文件中的代码:


    image.png

如果你只是想使用类库

  • composer require klib/wxtools 安装工具包,到你的项目。
  • 参考:

初始化composer

  • 首先进入刚才下载的php目录中,ls -lh 看一下目录中的文件和结构。

    image.png

  • 如果你使用的是PHP7,需要注意的情况,mcrypt_module_open、mcrypt_generic_init、mdecrypt_generic、mcrypt_generic_deinit、mcrypt_module_close 函数已经不建议使用,为了避免警告信息前面可以加上@ 符号进行屏蔽,比如 @mdecrypt_generic

  • 如果你使用的是PHP7,还需要注意这个类库写的比较早,需要里面PHP的类的构造方法为 __construct 因为PHP7语法上已经不支持同名构造方法了,如果是PHP5版本则不存在这个问题。

  • 输入 composer init 初始化composer 项目,我输入的包名称:klib/wxtools ,随便输入一个描述,type 输入library ,建立后端 composer.json 大致如下

{
    "name": "klib/wxtools",
    "description": "Make wxchar msg srypto lib.",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "LinHai",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

添加composer 的 autoload

  • 为了结构化代码,我先创建了一个新的目录结构,对于发布composer来书这个是可选的mkdir -p src/WxTools/Crypto ,然后把除了 demo.php composer.json 以外的文件全部拖动到 src/WxTools/Crypto 中,结构如下:

    image.png

  • 修改 vim composer.json 主要是添加了 php >=7.0 的require,和autoload 的配置部分。

{
    "name": "klib/wxtools",
    "description": "Make wxchar msg srypto lib.",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "LinHai",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=7.0"
    },
    "autoload": {
        "psr-4": {
            "KLib\\WxTools\\": "src/WxTools"
        }
    }
}

  • 之后执行 composer install 生成vendor 目录。
    image.png
image.png

测试composer - autoload 工作情况

  • 首先把这个类库规范化一下,首先就是改文件名,一个文件放一个class,文件名用class命名,这个很好修改,改完后大致这样:


    image.png
  • 之后给每个类新增 namespace KLib\WxTools\Crypto ; 命名空间,并且注释掉类中原来的 include_oncerequire_once 这种引用,比如 WXBizMsgCrypt
    image.png

修改demo.php

  • 这个文件解压缩后就有,之前一直没有动过,放在和composer.json 同一个目录里,我们就通过这个文件进行功能的测试。
  • 修改方法很简单,第一、引入KLib\WxTools\Crypto命名空间。第二、引入/vendor/autoload.php。第三,注释掉原来的include_once,效果如下:


    image.png

页面运行demo.php

  • 简直不要太顺利,成功了。


    image.png

发布这个类库到composer公网

  • 为了能更方便安装到其他项目中,也方便其他有需要人的使用,还需要发布这个类库到composer仓库中。

  • 需要一个公网上可以访问的git仓库,推荐使用https://github.com/ 在这里创建账号仓库,把这个项目传上去,如果不太明白什么意思请先百度git使用相关内容。

  • 我们还是在php目录,也就是composer.json 文件所在的目录下面输入 git init 进行git 初始化,它提示初始化了一个空仓库。

    image.png

  • COPY 你github 网站的源地址,比如我的是:[email protected]:kami1983/klib-wxtools.git

    image.png

  • 新增一个远程源输入命令git remote add origin [email protected]:kami1983/klib-wxtools.git (注意相对应的git地址需要替换成你自己的不可完全照抄。)

    image.png

  • 推送文件到github 上 ,输入命令:

# 建立 .gitignore 文件,忽略掉vendor 这个目录,这个目录不需要上传。
echo "**/vendor" >> .gitignore
# 这个文件也不需要上传
echo "composer.lock" >> .gitignore
# 将当前目录及子目录全部添加并提交到本地代码仓库
git add --all;git commit -m "WxTools - v1.0" 
# 将代码直接推送到远程仓库
git push origin master:master
  • 去git hub 上看看有没有文件,文件全部存在。


    image.png
  • 给当前软件版本打标签并上传到github

git tag -a "v1.0.1" -m "Wxtool initial version."
git push origin v1.0.1
image.png
  • 上推后github 上也有体现,如果没有说明上推失败。


    image.png

登录packagist

  • 登录https://packagist.org/ 如果没有账号就先创建一个。
  • 点击导航栏上面的 Submit 按钮准备提交仓库:


    image.png
  • 提交仓库 [email protected]:kami1983/klib-wxtools.git (这里请对应替换)
  • image.png
  • 提交完成后大致变成这个傻样子,下面红色的提示说这个包不会自动更新需要配置自动更新,这个和需要使用GitHook的钩子来实现。


    image.png

配置包文件的自动更新

  • 首选阅读the doc 这个很重要,提取出重要的 https://packagist.org/api/github?username=XXXX 地址信息。

    image.png

  • the docs 的内容大致如下

    image.png

  • 先获取Packagist网站上的Api Token 点击 用户名->Profile,COPY到剪切板,然后切换回github 。

image.png
  • github 上点击 settings -> webhook
    image.png
  • 如实填写,这些信息,Packagist 上都有,最后点击 Add webhook
    image.png

上推一个新版本测试一下

git tag -a "v1.0.2" -m "New  version."
git push origin v1.0.2
  • 自动同步完成WebHook,工作正常,此时浏览 packagist.org 大致如下:


    image.png

结束

  • 感谢阅读。

你可能感兴趣的:(发布一个简单Composer项目,微信加密解密工具包)