webman 引用 使用 抖店的 sdk

webmanchin

问题描述

webman 引用 使用 抖店的 sdk
我想实现在 webman 里面调用 抖店的函数,怎么做?

抖店的sdk里面有个 autoload.php 文件
贴上这个文件部分代码

<?php

//auto generated code
class autoload
{

    public static function loadClass($class)
    {
        $rootPath = dirname(__FILE__);
        $filename = $rootPath."/open/core/http/".$class.".php";
        if(is_file($filename)) {
            include $filename;
            return;
        }
        $filename = $rootPath."/open/core/".$class.".php";
        if(is_file($filename)) {
            include $filename;
            return;
        }
        $filename = $rootPath."/open/api/token/".$class.".php";
        if(is_file($filename)) {
            include $filename;
            return;
        }
        $filename = $rootPath."/open/api/token/param/".$

还有个 example.php 文件
贴上这个文件的部分代码

<?php

require "autoload.php";

include "open/api/materialgw/BinaryMaterialUploadAddressAuthParam.php";
include "open/api/materialgw/BinaryMaterialUploadAddressAuthRequest.php";
include "open/api/materialgw/BinaryMaterialUploadParam.php";

// ====API使用示例====
// $accessToken = AccessTokenBuilder::build("xxxx", ACCESS_TOKEN_SHOP_ID);
// 创建Request对象,假设调用的方法名称是: demo.method
// $request= new DemoMethodRequest();
// 发起API调用
// $response = $request->execute(accessToken);

// ====SPI使用示例====
// 服务端调用spi接口时的链接参数
// $request = new DoudianOpSpiRequest();
// $param = $request->getSpiParam();
// $param->appKey = 'xxxxx';
// $param->paramJson = "{}";
// $param->sign = 'xxxxxxx';
// $param->signMethod = 'md5';
// $param->timestamp = '2006-01-02 15:04:05';
// 定义并注册一个spi处理器
// $request->registerHandler(function ($context) {
//    $paramJsonObj = $context->getParamJsonObject();
//    var_dump($paramJsonObj);
//
//    echo $paramJsonObj->order_id;
//    echo $paramJsonObj->to_receiver_info->post_tel;
//
//    $data = array();
//    $data["order_id"] = "$paramJsonObj->order_id";
//    $data["shop_id"] = "$paramJsonObj->shop_id";
//    $context->setResponseData($data);
//    $context->wrapSuccess();
// });
// 执行处理器
// $response = $request->execute();
// 将response返回给服务器
// write return code here
433 3 1
3个回答

liziyu
<?php

namespace app\controller;

use support\Request;
use support\Response;

class DoudianController
{
    public function __construct()
    {
        // 引入抖店 SDK 的 autoload.php
        require_once __DIR__ . '/../../doudian-sdk/autoload.php';
    }

    public function demoMethod(Request $request): Response
    {
        // 示例: 创建 AccessToken
        $accessToken = AccessTokenBuilder::build("xxxx", ACCESS_TOKEN_SHOP_ID);

        // 创建 Request 对象
        $request = new DemoMethodRequest();

        // 发起 API 调用
        $response = $request->execute($accessToken);

        // 返回响应
        return response()->json($response);
    }
}

不知道这样行不行!~

  • webmanchin 2024-12-26

    试了,你这样不行
    Class "app\controller\AccessTokenBuilder" not found

nitron

正好抖店早期还在内部测试的时候,找我们进行了合作,当时是在它们官方下的SDK,没有composer包,不好集成进自己的系统
如果你是在官方下的SDK包,你可以用下面这个步骤进行
截图

  1. 到开放平台下载SDK并解压
  2. sdk-php同级新建一个sh文件,内容如下:
#!/bin/sh
clear
root=$PWD
echo "Start process"
[ -d douyin ] && rm -rf douyin 
mkdir douyin
cd douyin
cp -rp ../sdk-php/src/open/* .
dir=$PWD
[ -d param ] || mkdir param
cd "$dir/api"

echo "Processing api..."

for d in */ ; do  
    cd $d
    [ -d param ] && mv param/* "$dir/param/" && rmdir param
    [ -d data ] && mv data/* "$dir/core/" && rmdir data
    mv *.php ../
    cd ..
    rmdir $d
done

sed -i '2a\namespace Douyin\\Api;\n' *.php
sed -i '/auto generated code/d' *.php
sed -i '4a\namespace Douyin\\Core\\DoudianOpClient;' *.php
sed -i '5a\namespace Douyin\\Core\\GlobalConfig;' *.php
php-cs-fixer -q fix .

echo "Processing param..."

cd "$dir/param"
sed -i '2a\namespace Douyin\\Param;\n' *.php
sed -i '/auto generated code/d' *.php
php-cs-fixer -q fix .

echo "Processing core..."

cd "$dir/utils"
mv * ../core/
rmdir "$dir/utils"

cd "$dir/core"
mv http/*.php .
rmdir http

sed -i '2a\namespace Douyin\\Core;\n' *.php
sed -i '/auto generated code/d' *.php
sed -i '4a\use \\Exception;\n' HttpClient.php
sed -i '4a\use Douyin\\Api\\RefreshTokenRequest;' AccessTokenBuilder.php
sed -i '5a\use Douyin\\Api\\CreateTokenRequest;' AccessTokenBuilder.php
sed -i '6a\use Douyin\\Param\\CreateTokenParam;' AccessTokenBuilder.php
sed -i '7a\use Douyin\\Param\\RefreshTokenParam;\n' AccessTokenBuilder.php
php-cs-fixer -q fix .

echo "Start packing"
cd $root
[ -f douyin.zip ] && rm douyin.zip
zip -r -ll -q douyin.zip ./douyin -x "*.cache"
rm -rf douyin
echo "Job done! "
  1. 执行后会生成douyin.zip
  2. 将douyin.zip解压放到webman目录下,我这里是跟app目录同级
    5.修改composer.json,在psr-4的地方多加一行 "Douyin\": "douyin/", 我这里自己的大概是这样,Namespace我用的是Douyin,你可以换成你喜欢的,如果需要换,自行修改上面脚本内sed的Namespace
    "psr-4": {
      "Douyin\\": "douyin/"
    },
  3. 执行 composer dumpautoload
  4. 可以直接在代码里使用
    use Douyin\Api\xxxxxx;
    use Douyin\Core\xxxxxx;
    use Douyin\Param\xxxxxx;
  • webmanchin 29天前

    谢谢,可以,按照你发的稍微修改下就可以了,有个问题 使用 sdk, token 是自动维护吗? 我另外两个进程也用这个sdk 获取到的token 都一样的,不知道是自动维护还是抖店就这么设计的。

  • nitron 29天前

    有过期时间的,你看AceessTokenBuilder这个类就明白了

  • webmanchin 29天前

    看到有过期时间,但是发现三个进程,同时用 AceessTokenBuilder ,获取到的 token 刷新的token 还有到期时间都是一致的,所以问问是不是抖店就是这个机制

  • nitron 29天前

    那你还是把token缓存起来使用吧,提前刷新就是了,抖店的项目我们没跑在webman下

darcy

楼主你的加白是怎么过的?我们公司一直加不了白

  • liziyu 2025-01-04

    遇到过,加白甚是麻烦。

  • nitron 2025-01-06

    开发者后台不是有加IP白名单的功能么?

  • liziyu 2025-01-06

    @nitron 运营常说的加白,不是开发者ip白名单!

  • darcy 2025-01-06

    我说的加白是类目加白

  • nitron 2025-01-06

    嗷,这样,当时是他们来找我们合作的,所以我们没这个烦恼

  • webmanchin 29天前

    你是问什么加白? 我正常开发没遇到什么问题,就是有些接口不够人性化,和接口开发文档有些问题

×
🔝