(代码结构1)--接入多个第三方

代码结构总结(1)

代码结构场景

1.调用多个第三方的接口,比如调用微信、微信视频号、小红书接口等

整体结构如下图

在这里插入图片描述
说明:

  • open目录放 对外对接的平台
  • open/weixin目录为微信平台
  • open/weixin/channels为微信视频号
  • open/weixin/channels/api为微信视频号的各类接口
    其它目录依次类推,不做具体业务逻辑。OpenBase.php为抽象类,ChannelsBase.php 继承OpenBase.php并实现具体的方法,api目录下的所有类继承ChannelsBase.php,ChannelsBase.php主要做参数配置、token处理、写入请求日志等等。具体业务逻辑在service中处理,代码目录结构类似。

好处

1.代码结构清晰,方便管理代码

代码片段

1.OpenBase.php

<?php
/**
 * 第三方开放接口基类
 */
namespace common\open;

use Yii;
use yii\base\Component;
use common\exceptions\SystemException;

abstract class OpenBase extends Component
{
    /**
     * 创建对象
     * @param string $name      要创建的对象的类名
     * @param bool $isSingle    单例模式
     * @return static
     */
    public static function createObject($name = '', $isSingle = true)
    {
        if (empty($name)) {
            $name = static::class;
        }
        if ($isSingle && !Yii::$container->hasSingleton($name)) {
            Yii::$container->setSingleton($name);
        }

        return Yii::createObject($name);
    }

    /**
     * GET请求方法
     * @param  string $path    接口路径
     * @param  array  $queryParams  请求参数
     * @param  array  $headers 请求头
     * @param  array  $options 请求选项
     * @return array
     * @throws SystemException
     */
    public function get(
        string $path,
        array $queryParams = [],
        array $headers = [],
        array $options = []
    ) {
        return $this->request('get', $path, $queryParams, [], $headers, $options);
    }

    /**
     * POST 请求方法
     * @param  string $path    接口路径
     * @param  array  $bodyParams  请求参数
     * @param  array  $queryParams  请求参数
     * @param  array  $headers 请求头
     * @param  array  $options 请求选项
     * @return array
     * @throws SystemException
     */
    public function post(
        string $path,
        array $bodyParams = [],
        array $queryParams = [],
        array $headers = [],
        array $options = []
    ) {
        return $this->request('post', $path, $queryParams, $bodyParams, $headers, $options);
    }

    /**
     * 请求方法
     * @param  string $method  请求方法
     * @param  string $path    接口路径
     * @param  array  $queryParams  请求参数
     * @param  array  $bodyParams  请求参数
     * @param  array  $headers 请求头
     * @param  array  $options 请求选项
     * @return array
     * @throws SystemException
     */
    abstract protected function request($method, $apiMethod, $queryParams = [], $bodyParams = [], $headers = [], $options = []);

}

此处的单例可以减少对象创建。static::class 知识点可参考:
https://learnku.com/articles/74554

2.GoodsApi.php

<?php
namespace common\open\weixin\channels\api;


use common\exceptions\SystemException;
use Yii;
use common\open\weixin\channels\ChannelsBase;

class GoodsApi extends ChannelsBase
{
    /** 图片上传 */
    const API_UPLOAD_IMG = 'basics/img/upload';

    /** 商品上传 */
    const API_UPLOAD_GOODS = 'product/add';

    /** 生效的品牌列表 */
    const API_VALID_BRAND = 'brand/valid/list/get';

    /** 获取所有的类目 */
    const API_ALL_CATEGORY = 'category/all';

    /** 获取类目信息 */
    const API_ONE_CATEGORY = 'category/detail';

    /** 可用类目 */
    const API_VALID_CATEGORY = 'category/availablesoncategories/get';
    /** 运费模板列表*/
    const API_FREIGHT_TEMPLATE_LIST = 'merchant/getfreighttemplatelist';

    /** 运费模板详情 */
    const API_FREIGHT_TEMPLATE_DETAIL = 'merchant/getfreighttemplatedetail';

    const API_ADDRESS = 'merchant/address/list';

    const API_ADDRESS_DETAIL = 'merchant/address/get';

    /**
     * @desc:图片上传
     * @see:https://developers.weixin.qq.com/doc/channels/API/basics/img_upload.html
     * @param array $bodyParams
     * @param array $queryParams
     * @return array
     * @throws SystemException
     */
    public static function uploadImg(array $bodyParams, array $queryParams=[]): array
    {
        $res = self::createObject()->post(self::API_UPLOAD_IMG, $bodyParams,$queryParams);

        return $res['pic_file'] ?? '';
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值