Home > Backend Development > PHP Tutorial > How to implement WeChat's custom sharing function based on thinkPHP

How to implement WeChat's custom sharing function based on thinkPHP

墨辰丷
Release: 2023-03-28 21:28:02
Original
1821 people have browsed it

This article mainly introduces the WeChat custom sharing function based on thinkPHP, and analyzes the relevant operating skills of thinkPHP calling the WeChat interface to implement the custom sharing function in the form of examples. Friends in need can refer to it

On many large websites, we will see that you can share data to WeChat or QQ or other platforms by clicking Share. Let’s take a look at a PHP version of WeChat’s custom sharing code. There is no problem with the code referring to the official development.

Sharing requires authentication of WeChat subscription account or service account.

php code (thinkphp):

$appid='xxx';
$appsecret='xxxx';
$timestamp = time();
$noncestr = $this->getRandStr(15);
// dump();
$url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='. $this->get_token($appid,$appsecret) .'&type=jsapi';
$ret_json = $this->curl_get_contents($url);
$ret = json_decode($ret_json);
$ticket = $ret-> ticket;
//var_dump($ret);
$strvalue = 'jsapi_ticket='.$ticket.'&noncestr='.$noncestr.'&timestamp='.$timestamp.'&url=http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$signature = sha1($strvalue);
$this->assign('timestamp',$timestamp);
$this->assign('nonceStr',$noncestr);
$this->assign('signature',$signature);
function get_token($appid,$appsecret){
 if(S('access_token')) return S('access_token');
 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
 $ret_json = $this->curl_get_contents($url);
 $ret = json_decode($ret_json);
 if($ret -> access_token){
 S('access_token',$ret -> access_token,7200);
 return $ret -> access_token;
 }
}
function is_weixin(){
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
return true;
}
return false;
}
function getRandStr($length){
 $str = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 $randString = '';
 $len = strlen($str)-1;
 for($i = 0;$i < $length;$i ++){
 $num = mt_rand(0, $len);
 $randString .= $str[$num];
 }
 return $randString;
}
function curl_get_contents($url){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_TIMEOUT, 1);
 curl_setopt($ch, CURLOPT_MAXREDIRS, 200);
 curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
 curl_setopt($ch, CURLOPT_REFERER, _REFERER_);
 @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 $r = curl_exec($ch);
 curl_close($ch);
 return $r;
}
Copy after login

js code : Need to be introduced: http://res.wx.qq.com/open/js/jweixin-1.0.0.js

wx.config({
 debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
 appId: &#39;wxae7c36a1349c5868&#39;, // 必填,公众号的唯一标识
 timestamp: &#39;{$timestamp}&#39;, // 必填,生成签名的时间戳
 nonceStr: &#39;{$nonceStr}&#39;, // 必填,生成签名的随机串
 signature: &#39;{$signature}&#39;,// 必填,签名,见附录1
 jsApiList: [&#39;onMenuShareTimeline&#39;,&#39;onMenuShareAppMessage&#39;] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function(){
wx.onMenuShareTimeline({
 title: &#39;{$contentInfo.title}&#39;, // 分享标题
 link: window.location.href, // 分享链接
 imgUrl: &#39;http://&#39;+window.location.host+&#39;{$categoryInfo.image}&#39;, // 分享图标
 success: function () {
 // 用户确认分享后执行的回调函数
 //alert(1111);
 //fxfunc();
 },
 cancel: function () {
 // 用户取消分享后执行的回调函数
 //alert("您取消了分享");
 }
});
wx.onMenuShareAppMessage({
 title: &#39;{$contentInfo.title}&#39;, // 分享标题
 desc: removeHTMLTag(&#39;{$contentInfo.content}&#39;), // 分享描述
 link: window.location.href, // 分享链接
 imgUrl: &#39;http://&#39;+window.location.host+&#39;{$categoryInfo.image}&#39;, // 分享图标
 type: &#39;&#39;, // 分享类型,music、video或link,不填默认为link
 dataUrl: &#39;&#39;, // 如果type是music或video,则要提供数据链接,默认为空
 success: function () {
 // 用户确认分享后执行的回调函数
 //fxfunc();
 },
 cancel: function () {
 //alert("您取消了分享");
 // 用户取消分享后执行的回调函数
 }
});
 // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
function removeHTMLTag(str) {
 str = str.replace(/<\/?[^>]*>/g,&#39;&#39;); //去除HTML tag
 str = str.replace(/[ | ]*\n/g,&#39;\n&#39;); //去除行尾空白
 //str = str.replace(/\n[\s| | ]*\r/g,&#39;\n&#39;); //去除多余空行
 str=str.replace(/ /ig,&#39;&#39;);//去掉 
 return str;
}
Copy after login

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

Related recommendations:

php array_multisort Detailed explanation and examples of sorting arrays

PHP reading Several ways to get large files

5 ways to implement recursive directories in PHP

The above is the detailed content of How to implement WeChat's custom sharing function based on thinkPHP. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template