使用微信JS_JDK实现自定义分享功能

来源:互联网 发布:产品数据分析 编辑:程序博客网 时间:2024/06/03 21:34
1、设置JS接口安全域名。这里填写的是一级域名,不带www和http(https://mp.weixin.qq.com/

2、后台PHP提供微信配置参数
function make_nonceStr(){    $codeSet = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';    for ($i = 0; $i<16; $i++) {        $codes[$i] = $codeSet[mt_rand(0, strlen($codeSet)-1)];    }    $nonceStr = implode($codes);    return $nonceStr;}function make_signature($nonceStr,$timestamp,$jsapi_ticket,$url){    $tmpArr = array(        'noncestr' => $nonceStr,        'timestamp' => $timestamp,        'jsapi_ticket' => $jsapi_ticket,        'url' => $url    );    ksort($tmpArr, SORT_STRING);    $string1 = http_build_query( $tmpArr );    $string1 = urldecode( $string1 );    $signature = sha1( $string1 );    return $signature;}function make_ticket($appId,$appsecret){    // access_token 应该全局存储与更新,以下代码以写入到文件中做示例    $data = json_decode(file_get_contents("access_token.json"));    if ($data->expire_time < time()) {        $TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appsecret;        $json = file_get_contents($TOKEN_URL);        $result = json_decode($json,true);        $access_token = $result['access_token'];        if ($access_token) {            $data->expire_time = time() + 7000;            $data->access_token = $access_token;            $fp = fopen("Data/access_token.json", "w");            fwrite($fp, json_encode($data));            fclose($fp);        }    }else{        $access_token = $data->access_token;    }    // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例    $data = json_decode(file_get_contents("jsapi_ticket.json"));    if ($data->expire_time < time()) {        $ticket_URL="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";        $json = file_get_contents($ticket_URL);        $result = json_decode($json,true);        $ticket = $result['ticket'];        if ($ticket) {            $data->expire_time = time() + 7000;            $data->jsapi_ticket = $ticket;            $fp = fopen("Data/jsapi_ticket.json", "w");            fwrite($fp, json_encode($data));            fclose($fp);        }    }else{        $ticket = $data->jsapi_ticket;    }    return $ticket;}$appId = C('appid');   //需要的参数$appsecret = C('appsecret');$timestamp = time();   //需要的参数$jsapi_ticket = make_ticket($appId,$appsecret);$nonceStr = make_nonceStr();   //需要的参数$url = 'http://'.$_SERVER['HTTP_HOST'].__SELF__;$signature = make_signature($nonceStr,$timestamp,$jsapi_ticket,$url);   //需要的参数
3、在前台设置配置
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>wx.config({debug: false,appId: "你的AppID",timestamp: '上一步生成的时间戳',nonceStr: '上一步中的字符串',signature: '上一步生成的签名',jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] // 功能列表,我们要使用JS-SDK的什么功能});// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在 页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready 函数中。wx.ready(function(){// 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口wx.onMenuShareTimeline({title: '海量大数据创业平台|合伙人股权计算器', // 分享标题link:_imgUrl,imgUrl: _url // 分享图标});// 获取“分享给朋友”按钮点击状态及自定义分享内容接口wx.onMenuShareAppMessage({title: '海量大数据创业平台|合伙人股权计算器', // 分享标题desc: "以网络系统论+多目标综合评价,运用层次分析算法,让创业者调优股权分配方案时有了便捷的量化决策工具", // 分享描述link:_url,imgUrl: _imgUrl, // 分享图标type: 'link', // 分享类型,music、video或link,不填默认为link});//通过error接口处理失败验证wx.error(function(res){console.log(res);});});



阅读全文
0 0
原创粉丝点击