当前位置: 首页 > news >正文

微信JS-SDK应用DEMO

首先需要将以下函数写入TinkPHP的公用function.php文件中以便调用

// 基于ThinkPHP
 /**
 * php curl 请求链接
 * 当$post_data为空时使用GET方式发送
 * @param unknown $url
 * @param string $post_data
 * @return mixed
 */
function curlSend($url,$post_data=""){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    if($post_data != ""){
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
    }
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}


/**
 * 调用接口获取 $ACCESS_TOKEN
 * 微信缓存 7200 秒,这里使用thinkphp的缓存方法
 * @param unknown $APP_ID
 * @param unknown $APP_SECRET
 * @return Ambigous <mixed, Thinkmixed, object>
 */
function get_accesstoken($APP_ID,$APP_SECRET){
    $ACCESS_TOKEN = S($APP_ID);
    if($ACCESS_TOKEN == false){
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APP_ID."&secret=".$APP_SECRET;
        $json = curlSend($url);
        $data=json_decode($json,true);
        S($APP_ID,$data[access_token],7000);
        $ACCESS_TOKEN = S($APP_ID);
    }

    return $ACCESS_TOKEN;
}

/**
 * 微信网页JSSDK  调用接口获取 $jsapi_ticket
 * 微信缓存 7200 秒,这里使用thinkphp的缓存方法
 * @param unknown $ACCESS_TOKEN
 * @return Ambigous <mixed, Thinkmixed, object>
 */
function get_jsapi_ticket($ACCESS_TOKEN){
    $jsapi_ticket = S($ACCESS_TOKEN);
    if($jsapi_ticket == false){
        $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$ACCESS_TOKEN."&type=jsapi";
        $json = curlSend($url);
        $data = json_decode($json,true);
        
        S($ACCESS_TOKEN,$data[ticket],7000);
        $jsapi_ticket = S($ACCESS_TOKEN);
    }
    return $jsapi_ticket;
}

/**
 * 微信网页JSSDK 获取签名字符串
 * 所有参数名均为小写字符
 * @param unknown $nonceStr 随机字符串
 * @param unknown $timestamp 时间戳
 * @param unknown $jsapi_ticket
 * @param unknown $url 调用JS接口页面的完整URL,不包含#及其后面部分
 */
function get_js_sdk($APP_ID,$APP_SECRET){
    $protocol = (!empty($_SERVER[HTTPS]) && $_SERVER[HTTPS] !== off || $_SERVER[SERVER_PORT] == 443) ? "https://" : "http://";
    $url = $protocol.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];
    
    $argu = array();
    $argu[appId] = $APP_ID;
    $argu[url] = $url;
    $argu[nonceStr] = createNonceStr();
    $argu[timestamp] = time();
    
    $ACCESS_TOKEN = get_accesstoken($APP_ID, $APP_SECRET);
    $argu[jsapi_ticket] = get_jsapi_ticket($ACCESS_TOKEN);

    $string = "jsapi_ticket=".$argu[jsapi_ticket]."&noncestr=".$argu[nonceStr]."&timestamp=".$argu[timestamp]."&url=".$argu[url];
    $argu[signature] = sha1(trim($string));
    return $argu;
}

/**
 * 获取随机字符串
 * @param number $length
 * @return string
 */
function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
        $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}

其次在程序里面调用JSSDK的配置信息,如下:

$confinfo = get_js_sdk("你的APPID","你的APP_SECRET");
$this->assign("confinfo",$confinfo);

最后创建html文件,其中JS内容如下:

//引入微信JS支持文件//=============这里博主用的是SMARTY引擎,所以代码自然就是smarty代码 var timestamp = "{$confinfo[timestamp]}"; var nonceStr = "{$confinfo[nonceStr]}"; var signature = "{$confinfo[signature]}"; var appId = "{$confinfo[appId]}"; /*******以下JS仅仅在微信浏览器下有效*********/ wx.config({ debug:false, appId:appId, timestamp:timestamp, nonceStr:nonceStr, signature:signature, jsApiList:[onMenuShareTimeline,onMenuShareAppMessage,onMenuShareQQ] }); wx.ready(function(){ 这个地方就是你的分享代码了,具体您可以去微信官网看看那个让人蛋疼的JSSDK文档吧,最主要的内容在上面,仔细看哦! });

转载于:https://www.cnblogs.com/3body/p/5417019.html

相关文章:

  • Javascript 页面刷新
  • unix编程艺术中的17点编程原则--设计开发者的至高准则
  • Intel系列CPU的流水线技术的发展
  • 实验二 作业调度模拟程序
  • Spring源码学习(二)------ AOP
  • 2,3,4,11章
  • 职场官话
  • 团队项目冲刺第五天
  • 用borland together反向工程生成sequence图的方法
  • C字符数组的处理
  • p2p终结者破解版下载 4.15 2011最新版
  • mysql简单操作(实时更新)
  • 更新-清理sga组件
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • 20145302张薇《Java程序设计》第八周学习总结
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [译]如何构建服务器端web组件,为何要构建?
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【mysql】环境安装、服务启动、密码设置
  • conda常用的命令
  • exif信息对照
  • Git 使用集
  • js正则,这点儿就够用了
  • mockjs让前端开发独立于后端
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • MySQL主从复制读写分离及奇怪的问题
  • npx命令介绍
  • NSTimer学习笔记
  • SAP云平台里Global Account和Sub Account的关系
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 数据可视化之下发图实践
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二)linux使用docker容器运行mysql
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 解决重复提交问题
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net6 webapi log4net完整配置使用流程
  • ?php echo ?,?php echo Hello world!;?
  • [20160902]rm -rf的惨案.txt
  • [Android]竖直滑动选择器WheelView的实现
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [I2C]I2C通信协议详解(二) --- I2C时序及规格指引
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [openGL]在ubuntu20.06上搭建openGL环境
  • [Python]list.append字典的时候,修改字典会导致list内容变化的问题
  • [python]用python获取EXCEL文件内容并保存到DBC
  • [sqlmap]学习笔记#1