当前位置:   article > 正文

(代码结构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 = []);

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83

此处的单例可以减少对象创建。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'] ?? '';
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/750029
推荐阅读
相关标签
  

闽ICP备14008679号