由于工作上的需求,现在需要将其他公众号文章发布在我们小程序上,而其他公众号小程序已经没有合作添加位了,在他们允许的情况下,我使用nginx加代码去处理这个问题
首先小程序后台我们新增一个业务域名,小程序中可以直接访问的那种
使用了guzzlehttp/guzzle以及kub-at/php-simple-html-dom-parser类包
小程序使用webviews去访问指定的文章链接
https://a.b.c/api/news/100
该接口处理
public function html($new_id, News $news){$news = $news->find($new_id);$client = new \GuzzleHttp\Client();$info = $client->get($news['detail_url'], ['verify' => false,'timeout' => 5,]);$html =$info->getBody()->getContents();echo $this->deal($html);exit();}public function deal($html){$replace = ["http://m.qpic.cn" => "https://自己小程序的授信域名/m.qpic.cn","https://m.qpic.cn" => "https://自己小程序的授信域名/m.qpic.cn","http://a1.qpic.cn" => "https://自己小程序的授信域名/a1.qpic.cn","https://a1.qpic.cn" => "https://自己小程序的授信域名/a1.qpic.cn","http://mmbiz.qpic.cn" => "https://自己小程序的授信域名/mmbiz.qpic.cn","https://mmbiz.qpic.cn" => "https://自己小程序的授信域名/mmbiz.qpic.cn","http://mmbiz.qlogo.cn" => "https://自己小程序的授信域名/mmbiz.qlogo.cn","https://mmbiz.qlogo.cn" => "https://自己小程序的授信域名/mmbiz.qlogo.cn","http://mmsns.qpic.cn" => "https://自己小程序的授信域名/mmsns.qpic.cn","https://mmsns.qpic.cn" => "https://自己小程序的授信域名/mmsns.qpic.cn","//res.wx.qq.com" => "https://自己小程序的授信域名/res.wx.qq.com",];foreach ($replace as $key=>$value){$html = str_replace($key,$value,$html);}$dom = HtmlDomParser::str_get_html($html);$imgs = $dom->find('img');foreach ($imgs as $img) {$attrs = $img->attr;foreach ($attrs as $attr=>$value) {if (preg_match('/src/', $attr)) {if($value){$img->src = $value;}}}}return $dom;}
然后在自己的小程序首页业务域名处新增ssl配置,然后新增反向代理,代理配置如下
location ^~/ {resolver 114.114.114.114;set $proxy_to http:/$uri;proxy_set_header Referer http://mp.weixin.qq.com;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass $proxy_to;# expires 365d;}
结论: