ThinkPHP实现微信分享好友转发朋友圈自定义图片和文字的方法,在开始之前呢,我们需要准备好一些东西:
前期准备
- 认证的公众号,订阅号或者服务号都可以,只要是认证过的就可以。
- 公众号的AppID和AppSecret,登录微信公众平台,开发—基本配置,就可以看到啦。
- 设置JSJS接口安全域名,登录微信公众平台,设置—公众号设置—功能设置里,填写就可以了。
- 官方SDK,我们直接下载案例就可以,下载地址:
http://demo.open.weixin.qq.com/jssdk/sample.zip
里面包含php、java、nodejs以及python的示例代码。
服务端准备(ThinkPHP)
- 将刚刚下载的jssdk.php文件重命名为Jssdk.php,然后和access_token.php、jsapi_ticket.php一起放入到ThinkPHP框架的第三方接口扩展目录下(extend/org/wechat/)。
修改Jssdk.php文件
首先我们需要在构造函数中设置
$this->path = __DIR__ . DS;
即:namespace wechat; class Jssdk { private $appId; private $appSecret; private $path; public function __construct($appId, $appSecret) { $this->appId = $appId; $this->appSecret = $appSecret; $this->path = __DIR__ . DS; } ... }
将
get_php_file
函数返回值中的$filename
改为$this->path.$filename
,即:private function get_php_file($filename) { return trim(substr(file_get_contents($this->path.$filename), 15)); }
设置token的缓存,修改getAccessToken,加入cache
private function getAccessToken() { // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 // cache('at', ['access_token'=>'sss', 'expire_time' => '123']); // $data = json_decode($this->get_php_file("access_token.php")); $data = cache('at'); if ($data['expire_time'] < time()) { // 如果是企业号用以下URL获取access_token // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret"; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret"; $res = json_decode($this->httpGet($url)); $access_token = $res->access_token; if ($access_token) { // $data->expire_time = time() + 7000; // $data->access_token = $access_token; cache('at', ['access_token'=>$access_token, 'expire_time' => time() + 7000]); // $this->set_php_file("access_token.php", json_encode($data)); } } else { $access_token = $data['access_token']; } return $access_token; }
在控制器里面调用
- 导入jssdk,
use wechat\Jssdk;
传给前端
$jssdk = new Jssdk($AppID, $AppSecret); $res = $jssdk->getSignPackage(); $appId = $res['appId']; $timestamp = $res['timestamp']; $nonceStr = $res['nonceStr']; $signature = $res['signature']; $this->assign( array( 'appId'=>$appId, 'timestamp'=>$timestamp, 'nonceStr'=>$nonceStr, 'signature'=>$signature, ) );
网页端
- 导入jssdk,
导入jssdk
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
设置分享内容
<script type="text/javascript"> var title = '分享标题'; var imgUrl = '分享图片'; var link = '分享地址'; var desc = '分享描述'; wx.config({ debug: false,//开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '{$appId}', // 必填,公众号的唯一标识 timestamp: '{$timestamp}', // 必填,生成签名的时间戳 nonceStr: '{$nonceStr}', //必填, 生成签名的随机串 signature: '{$signature}', //必填,签名 jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareQZone'] //必填, JS接口列表,这里只填写了分享需要的接口 }) wx.ready(function () { wx.onMenuShareTimeline({ title: title, link: link, desc:desc, imgUrl: imgUrl, success: function() { // 用户确认分享后执行的回调函数 }, cancel: function() { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ title: title, // 分享标题 desc: desc, // 分享描述 link: link, // 分享链接 imgUrl: imgUrl, // 分享图标 type: 'link', // 分享类型,music、video或link,不填默认为link dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空 success: function() { // 用户确认分享后执行的回调函数 }, cancel: function() { // 用户取消分享后执行的回调函数 } }); }) </script>
One comment
如果想要修改后的文件,可以联系小编哦