php微信公众号自定义“分享给朋友“,完整前后台代码

前台js

<!-- 引入js文件 -->
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
    var title="{$data.title}";//标题文字
    var present="{$data.present}";//介绍文字
    var image="{$Request.domain}{$data.image}";//拼接的图片地址 域名+路径
    $.ajax({
        url: '/index/wx/weixin',//控制器路径
        type: 'post',
        data: {url1:location.href},//当前页面的完整路径 域名+路径
        success: function (res) {
            var json = eval('(' + res + ')');
            wx.config({
                debug: false,
                appId:json.appid,
                timestamp: json.timestamp,
                nonceStr: json.nonceStr,
                signature: json.signature,
                jsApiList: [
                    'onMenuShareAppMessage'
                ]
            });

            wx.ready(function () {
                wx.checkJsApi({
                    jsApiList: [
                        'onMenuShareAppMessage',
                    ],
                });
                //分享到微信朋友
                wx.onMenuShareAppMessage({
                    title: title,
                    desc: present,
                    link: location.href,
                    imgUrl: image,
                    success: function (res) {
                        if (res.errMsg == 'sendAppMessage:ok' || res.errMsg == 'onMenuShareAppMessage:ok') {
                            share({gid: id, is_zhuan: $('#is_zhuan').val()});
                        } else {
                            alert('用户取消分享')
                        }
                    }
                });

            });
        }
    });
</script>

tp5后台

<?php
namespace app\index\controller;
use think\Controller;
class Wx extends Controller
{
    public function weixin(){
        $url = input('url1');;//获取当前页面的url,接收请求参数
        $root['url'] = $url;
        //获取access_token,并缓存
        $file = RUNTIME_PATH.'/access_token';//缓存文件名access_token
        $appid='XXXXXXXXX'; // 填写自己的appid
        $secret='XXXXXXXXXXXXXXXXXXX'; // 填写自己的appsecret
        $expires = 3600;//缓存时间1个小时
        if(file_exists($file)) {
            $time = filemtime($file);
            if(time() - $time > $expires) {
                $token = null;
            }else {
                $token = file_get_contents($file);
            }
        }else{
            fopen("$file", "w+");
            $token = null;
        }
        if (!$token || strlen($token) < 6) {
            $res = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret."");
            $res = json_decode($res, true);
            $token = $res['access_token'];
            // write('access_token', $token, 3600);、、
            @file_put_contents($file, $token);
        }
        //获取jsapi_ticket,并缓存
        $file1 = RUNTIME_PATH.'/jsapi_ticket';
        if(file_exists($file1)) {
            $time = filemtime($file1);
            if(time() - $time > $expires) {
                $jsapi_ticket = null;
            }else {
                $jsapi_ticket = file_get_contents($file1);
            }
        }else{
            fopen("$file1", "w+");
            $jsapi_ticket = null;
        }
        if (!$jsapi_ticket || strlen($jsapi_ticket) < 6) {
            $ur = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$token&type=jsapi";
            $res = file_get_contents($ur);
            $res = json_decode($res, true);
            $jsapi_ticket = $res['ticket'];
            @file_put_contents($file1, $jsapi_ticket);
        }

        $timestamp = time();//生成签名的时间戳
        $metas = range(0, 9);
        $metas = array_merge($metas, range('A', 'Z'));
        $metas = array_merge($metas, range('a', 'z'));
        $nonceStr = '';
        for ($i=0; $i < 16; $i++) {
            $nonceStr .= $metas[rand(0, count($metas)-1)];//生成签名的随机串
        }

        $string1="jsapi_ticket=".$jsapi_ticket."&noncestr=".$nonceStr."&timestamp=".$timestamp."&url=".$url."";
        $signature=sha1($string1);
        $root['appid'] = $appid;
        $root['nonceStr'] = $nonceStr;
        $root['timestamp'] = $timestamp;
        $root['signature'] = $signature;

        $root['token'] = $token;


        echo json_encode($root);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值