我们都知道,微信公众号的后台是只能配置一个API对接接口的。
这样当一个公众号对接多个系统的时候,就没办法满足需求。
遇到这种情况我们如何是好?当然如果注册微信开放平台是可以实现对接多个服务的,但是这样需要开发一个微信服务平台,很多场景下不能这样做。
在经过调研之后,我们提出了一种可以通过转发策略来实现一个微信公众号对接多个系统的办法。
大致思路是:
微信公众号服务平台 ↔ 主对接接口 → 对接接口A、对接接口B
可以通过付下代码实现,将多个对接的API接口传入 wechat_api_proxy 函数,可以将服务器收到的推送消息再次原样转发给多个服务器,并且记录返回结果。
function wechat_api_proxy($urls){ foreach($urls as $url){ $request = app('request'); $post = $request->getContent(); $url = $item['url'] . '?' . http_build_query($_GET); $header = []; $header['content-type'] = \ModStart\Core\Input\Request::headerGet('content-type'); $ret = CurlUtil::postRaw($url, $post, [ 'header' => $header ]); Log::info('WechatTransfer' . ' -> item - ' . json_encode($item, JSON_UNESCAPED_UNICODE) . ' -> url - ' . $url . ' -> header - ' . json_encode($header, JSON_UNESCAPED_UNICODE) . ' -> post - ' . json_encode($post, JSON_UNESCAPED_UNICODE) . ' -> result - ' . json_encode($ret, JSON_UNESCAPED_UNICODE) ); if (strtolower($ret) == 'success') { continue; } $results[] = $ret; } return $results;}
最终在用户返回过程中根据多个系统反馈的结果决策实际需要使用的结果。
目前这种方法已经在 ModStart 多套系统中得到生产验证使用,整体还比较稳定,希望给大家提供一种思路和方法。