小程序显示其他公众号文章内容

2021-09-08 06:33:23   工作备份

 

由于工作上的需求,现在需要将其他公众号文章发布在我们小程序上,而其他公众号小程序已经没有合作添加位了,在他们允许的情况下,我使用nginx加代码去处理这个问题

首先小程序后台我们新增一个业务域名,小程序中可以直接访问的那种

使用了guzzlehttp/guzzle以及kub-at/php-simple-html-dom-parser类包

小程序使用webviews去访问指定的文章链接

  1. https://a.b.c/api/news/100

该接口处理

  1. public function html($new_id, News $news)
  2. {
  3. $news = $news->find($new_id);
  4. $client = new \GuzzleHttp\Client();
  5. $info = $client->get($news['detail_url'], [
  6. 'verify' => false,
  7. 'timeout' => 5,
  8. ]);
  9. $html =$info->getBody()->getContents();
  10. echo $this->deal($html);
  11. exit();
  12. }
  13. public function deal($html)
  14. {
  15. $replace = [
  16. "http://m.qpic.cn" => "https://自己小程序的授信域名/m.qpic.cn",
  17. "https://m.qpic.cn" => "https://自己小程序的授信域名/m.qpic.cn",
  18. "http://a1.qpic.cn" => "https://自己小程序的授信域名/a1.qpic.cn",
  19. "https://a1.qpic.cn" => "https://自己小程序的授信域名/a1.qpic.cn",
  20. "http://mmbiz.qpic.cn" => "https://自己小程序的授信域名/mmbiz.qpic.cn",
  21. "https://mmbiz.qpic.cn" => "https://自己小程序的授信域名/mmbiz.qpic.cn",
  22. "http://mmbiz.qlogo.cn" => "https://自己小程序的授信域名/mmbiz.qlogo.cn",
  23. "https://mmbiz.qlogo.cn" => "https://自己小程序的授信域名/mmbiz.qlogo.cn",
  24. "http://mmsns.qpic.cn" => "https://自己小程序的授信域名/mmsns.qpic.cn",
  25. "https://mmsns.qpic.cn" => "https://自己小程序的授信域名/mmsns.qpic.cn",
  26. "//res.wx.qq.com" => "https://自己小程序的授信域名/res.wx.qq.com",
  27. ];
  28. foreach ($replace as $key=>$value){
  29. $html = str_replace($key,$value,$html);
  30. }
  31. $dom = HtmlDomParser::str_get_html($html);
  32. $imgs = $dom->find('img');
  33. foreach ($imgs as $img) {
  34. $attrs = $img->attr;
  35. foreach ($attrs as $attr=>$value) {
  36. if (preg_match('/src/', $attr)) {
  37. if($value){
  38. $img->src = $value;
  39. }
  40. }
  41. }
  42. }
  43. return $dom;
  44. }

然后在自己的小程序首页业务域名处新增ssl配置,然后新增反向代理,代理配置如下

  1. location ^~/ {
  2. resolver 114.114.114.114;
  3. set $proxy_to http:/$uri;
  4. proxy_set_header Referer http://mp.weixin.qq.com;
  5. proxy_set_header X-Real-IP $remote_addr;
  6. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7. proxy_pass $proxy_to;
  8. # expires 365d;
  9. }

结论:

  1. 我们使用接口形式输出修改过所有链接地址的html,避开了小程序无法访问未授权域名的问题
  2. 我们将HTML内所有的符合条件的连接都修改成了指定域名格式,然后使用nginx动态反向代理,帮助我们访问静态资源,避开跨域问题
  3. 至此小程序已经可以正常访问公众号文章
  4. 可惜的是,这种方法无法跳转第三方公众号