Home  >  Article  >  Backend Development  >  PHP method to implement WeChat public account custom sharing content

PHP method to implement WeChat public account custom sharing content

墨辰丷
墨辰丷Original
2018-06-01 10:44:383592browse

This article mainly introduces the method of implementing the custom shared content of the WeChat public account in PHP, and analyzes the interface calling and related usage skills of PHP to implement the custom shared content of the WeChat public account in the form of examples. Friends in need can refer to the following

WeChat public accounts can realize customized sharing content through the API interface on mobile phones. Let’s take a look at the implementation steps of this interface.

1. Preparation stage

One public account and one microsite.

2. Bind the domain name

First log in to the WeChat public platform and enter the "Public Account Settings" Fill in the "JS interface security domain name" in the "Function Settings".

Note: After logging in, you can view the corresponding interface permissions in the "Developer Center".

3. Code

<?php
//curl获取请求文本内容
function get_curl_contents($url, $method =&#39;GET&#39;, $data = array()) {
  if ($method == &#39;POST&#39;) {
    //使用crul模拟
    $ch = curl_init();
    //禁用htt<a href="/fw/photo.html" target="_blank">ps</a>
    <a href="/tags.php/curl_setopt/" target="_blank">curl_setopt</a>($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    //允许请求以文件流的形式返回
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_URL, $url);
    $result = curl_exec($ch); //执行发送
    curl_close($ch);
  }else {
    if (ini_get(&#39;allow_<a href="/tags.php/fopen/" target="_blank">fopen</a>_url&#39;) == &#39;1&#39;) {
      $result = file_get_contents($url);
    }else {
      //使用crul模拟
      $ch = curl_init();
      //允许请求以文件流的形式返回
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
      //禁用https
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_setopt($ch, CURLOPT_URL, $url);
      $result = curl_exec($ch); //执行发送
      curl_close($ch);
    }
  }
  return $result;
}
//获取微信公从号access_token
function wx_get_token() {
  $AppID = &#39;1235464654&#39;;//AppID(应用ID)
  $AppSecret = &#39;705641465sdfasdf456465a4sdf&#39;;//AppSecret(应用密钥)
  $url = &#39;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=&#39;.$AppID.&#39;&secret=&#39;.$AppSecret;
  $res = get_curl_contents($url);
  $res = json_decode($res, true);
  //这里应该把access_token缓存起来,至于要怎么缓存就看各位了,有效期是7200s
  return $res[&#39;access_token&#39;];
}
//获取微信公从号ticket
function wx_get_jsapi_ticket() {
  $url = sprintf("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi", wx_get_token());
  $res = get_curl_contents($url);
  $res = json_decode($res, true);
  //这里应该把access_token缓存起来,至于要怎么缓存就看各位了,有效期是7200s
  return $res[&#39;ticket&#39;];
}
$wx = array();
//生成签名的时间戳
$wx[&#39;timestamp&#39;] = time();
//生成签名的随机串
$wx[&#39;noncestr&#39;] = &#39;Wm3WZYTPz0wzccnW&#39;;
//jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。
$wx[&#39;jsapi_ticket&#39;] = wx_get_jsapi_ticket();
//分享的地址,注意:这里是指当前网页的URL,不包含#及其后面部分,曾经的我就在这里被坑了,所以小伙伴们要小心了
$wx[&#39;url&#39;] = &#39;http://www.baidu.com&#39;;
$string = sprintf("jsapi_ticket=%s&noncestr=%s&timestamp=%s&url=%s", $wx[&#39;jsapi_ticket&#39;], $wx[&#39;noncestr&#39;], $wx[&#39;timestamp&#39;], $wx[&#39;url&#39;]);
//生成签名
$wx[&#39;signature&#39;] = sha1($string);
/*
注意事项
签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
签名用的url必须是调用JS接口页面的完整URL。
出于安全考虑,开发者必须在服务器端实现签名的逻辑。
*/
?>

##4. View display

Introduce the following JS file into the page that needs to call the JS interface. Support https: http://res.wx.qq.com/open/js/jweixin-1.0.0.js

to inject permission verification through the config interface. Configuration.

<script>
//通过config接口注入权限验证配置
wx.config({
  debug : false,
  appId : &#39;AppID&#39;,
  timestamp : &#39;<?php echo $wx["timestamp"];?>&#39;,
  nonceStr : &#39;<?php echo $wx["noncestr"];?>&#39;,
  signature : &#39;<?php echo $wx["signature"];?>&#39;,
  jsApiList : [&#39;onMenuShareTimeline&#39;, &#39;onMenuShareAppMessage&#39;, &#39;onMenuShareQQ&#39;, &#39;onMenuShareWeibo&#39;]
});
wx.ready(function(){
  var
    s_title = &#39;分享标题&#39;,  // 分享标题
    s_link = &#39;分享链接&#39;,  // 分享链接
    s_desc = &#39;分享描述&#39;,  //分享描述
    s_imgUrl = &#39;分享图片&#39;; // 分享图标
  //朋友圈
  wx.onMenuShareTimeline({
    title: s_title, // 分享标题
    link: s_link, // 分享链接
    imgUrl: s_imgUrl, // 分享图标
    success: function () { },
    cancel: function () { }
  });
  //发送给好友
  wx.onMenuShareAppMessage({
    title: s_title, // 分享标题
    desc: s_desc, // 分享描述
    link: s_link, // 分享链接
    imgUrl: s_imgUrl, // 分享图标
    type: &#39;&#39;, // 分享类型,music、video或link,不填默认为link
    dataUrl: &#39;&#39;, // 如果type是music或video,则要提供数据链接,默认为空
    success: function () {},
    cancel: function () {}
  });
  //QQ好友
  wx.onMenuShareQQ({
    title: s_title, // 分享标题
    desc: s_desc, // 分享描述
    link: s_link, // 分享链接
    imgUrl: s_imgUrl, // 分享图标
    success: function () { },
    cancel: function () { }
  });
  //腾讯微博
  wx.onMenuShareWeibo({
    title: s_title, // 分享标题
    desc: s_desc, // 分享描述
    link: s_link, // 分享链接
    imgUrl: s_imgUrl, // 分享图标
    success: function () { },
    cancel: function () { }
  });
});
</script>

5. Done

The basic process is like this. The more troublesome point is to generate Just pay attention to the signature part.

Summary: The above is the entire content of this article, I hope it can be helpful to everyone's study.

Related recommendations:

Solution to the memory exhaustion problem of PHP querying large amounts of data

php Mongodb determines whether the coordinates are within the specified polygon area.

Several points to note when defining command space in PHP

The above is the detailed content of PHP method to implement WeChat public account custom sharing content. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn