博主最大Lv63
CRMEB单商户4.x添加1688采集接口(Pro适用)
新版本的采集使用付费采集的方式进行采集,比之前免费的采集准确,而且可以获取到商品的规格列表,系统默认自带淘宝、天猫、京东、苏宁、拼多多的采集接口,还有更多的数据接口需要大家自己去进行二开适配,本篇文章主要介绍怎么去对接1688的采集接口,后面其他采集接口也可以按照此方法进行二开适配。
先登陆http://www.99api.com/ 添加 1688阿里巴巴API。
第一步,找到app\services\product\product\CopyTaobaoServices.php文件,在$host中添加1688,保证1688数据的URL地址能进行自动识别。
- case '1688':
- $params = [];
- if (isset($url_arr['query']) && $url_arr['query']) {
- $path = str_replace('.html', '', $url_arr['path']);
- $params = explode('/', $path);
- }
- $id = $params[2] ?? '';
- $shopid = $params[1] ?? '';
- break;
第二步,找到crmeb\services\CopyProductService.php文件,在$api中添加1688采集接口。
- '1688' => 'https://api03.6bqb.com/alibaba/detail',
在下面getInfo方法里添加对应的1688代码,因为程序获取了对应链接中的固定文字如taobao、jd、1688作为方法名称的开头,而1688是数字不能作为方法名称开头使用,故在代码中将1688替换为alibaba。99api中1688采集接口只需要itemid。这里需要注意99api中获取详情的参数设置,每个接口都不一样。如果继续添加别的接口时需要注意
第三步,上图中当采集数据为1688的商品时,$action的值为alibabaInfo,所以在本文件中添加alibabaInfo方法,发送request请求获取该链接的商品详情。
- public static function alibabaInfo(string $url, array $data, string $method = 'get')
- {
- $info = HttpService::request($url, $method, $data);
- $result = false;
- if ($info) {
- $result = $info;
- }
- return $result;
- }
获取到的数据因为格式问题无法直接被系统使用,需要进行数据组合按照(图7)的格式进行组合,因为$deal_action值为alibabaDeal,所以调用方法为alibabaDeal,程序中新加alibabaDeal方法(图8)。组合的数据需要仔细阅读接口返回的数据,对应赋值,其中items为商品规格,里面有多个规格,每个规格里面value为规格的名称,detail为规格的值,detail为数组,每个规格也是数组,最后将组合放入items中。其余的参数比较容易读取。
- public static function alibabaDeal(array $data)
- {
- $result = self::$productInfo;
- if ($data) {
- $result['store_name'] = $data['title'] ?? '';
- $result['store_info'] = $result['store_name'];
- $result['slider_image'] = $data['images'] ?? [];
- $result['price'] = $data['price'] ?? 0;
- $result['description'] = $data['desc'] ?? '';
- $items = [];
- if (isset($data['skuProps']) && $data['skuProps']) {
- $i = 0;
- foreach ($data['skuProps'] as $passSUb) {
- $items[$i]['value'] = $passSUb['prop'];
- $items[$i]['detail'] = array_column($passSUb['value'],'name');
- $i++;
- }
- }
- foreach ($items as $k => $item) {
- $items[$k]['detail'] = array_unique($item['detail']);
- }
- $result['items'] = $items;
- }
- return $result;
- }
$items的数据格式为(样例)
- $items = [
- [
- 'value'=>'颜色',
- 'detail'=>[
- '红色','蓝色'
- ]
- ],
- [
- 'value'=>'大小',
- 'detail'=>[
- '大','小'
- ]
- ]
- ];
写在最后,测试一下,完美实现(图9),如果要对接其他的采集,同理也可以按照此步骤,只是在数据组合的时候需要注意数据格式。
0 已被阅读了1287次 楼主 2020-09-12 20:37:26