微信分享 ajax冲突,微信jssdk分享功能开发及解决ajax跨域的问题

微信JS-SDK说明文档

微信JS-SDK Demo

我所要实现的分享功能要求:只要提供一段js代码给前端美工放置在静态页面等就可以实现分享功能。

js代码如下:

url=location.href;

$.ajax({

type : "get",

url : "http://域名/wx/test/jssdk.php?url="+url,

dataType : "jsonp",

jsonp: "callback",

jsonpCallback:"success_jsonpCallback",

success : function(data){

wx.config({

appId: data.appId,

timestamp: data.timestamp,

nonceStr: data.nonceStr,

signature: data.signature,

jsApiList: [

"onMenuShareTimeline",

"onMenuShareAppMessage"

]

});

},

error:function(data){

alert("连接失败!");

}

});

wx.ready(function (){

var shareData = {

title: '霾黄色预警昨发布 冷空气昨夜到温 雾霾可能消散',

desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。',

link: 'http://news.wendu.cn/2015/0127/482049.shtml',

imgUrl: 'http://upload.wendu.cn/2015/0127/1422306020538.jpg'

};

wx.onMenuShareAppMessage(shareData);

wx.onMenuShareTimeline(shareData);

});

为了便于在不同的域名下面页面调用,用了jsonp(json的一种使用模式)来解决跨域数据访问的问题。

url=location.href;获取当前网址,以参数的方式传给jssdk.php进行签名验证。  url : "http://域名/wx/test/jssdk.php?url="+url

jssdk.php是在微信JS-SDK DEMO的基础上进行了修改。代码如下:

$url = $_GET['url'];

class JSSDK {

private $appId;

private $appSecret;

private $url;

public function __construct($appId, $appSecret,$url) {

$this->appId = $appId;

$this->appSecret = $appSecret;

$this->url = $url;

}

public function getSignPackage() {

$jsapiTicket = $this->getJsApiTicket();

$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";

// $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$url =$this->url;

$timestamp = time();

$nonceStr = $this->createNonceStr();

// 这里参数的顺序要按照 key 值 ASCII 码升序排序

$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

$signature = sha1($string);

$signPackage = array(

"appId"     => $this->appId,

"nonceStr"  => $nonceStr,

"timestamp" => $timestamp,

"url"       => $url,

"signature" => $signature,

"rawString" => $string

);

return $signPackage;

}

private 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;

}

private function getJsApiTicket() {

// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例

$data = json_decode(file_get_contents("jsapi_ticket.json"));

if ($data->expire_time < time()) {

$accessToken = $this->getAccessToken();

// 如果是企业号用以下 URL 获取 ticket

// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";

$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

$res = json_decode($this->httpGet($url));

$ticket = $res->ticket;

if ($ticket) {

$data->expire_time = time() + 7000;

$data->jsapi_ticket = $ticket;

$fp = fopen("jsapi_ticket.json", "w");

fwrite($fp, json_encode($data));

fclose($fp);

}

} else {

$ticket = $data->jsapi_ticket;

}

return $ticket;

}

private function getAccessToken() {

// access_token 应该全局存储与更新,以下代码以写入到文件中做示例

$data = json_decode(file_get_contents("access_token.json"));

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;

$fp = fopen("access_token.json", "w");

fwrite($fp, json_encode($data));

fclose($fp);

}

} else {

$access_token = $data->access_token;

}

return $access_token;

}

private function httpGet($url) {

$curl = curl_init();

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_TIMEOUT, 500);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_URL, $url);

$res = curl_exec($curl);

curl_close($curl);

return $res;

}

}

$jssdk = new JSSDK("公众号", "公众号密钥",$url);

$signPackage = $jssdk->GetSignPackage();

$tmp=json_encode(array ('appId'=>$signPackage["appId"],'timestamp'=>$signPackage["timestamp"],'nonceStr'=>$signPackage["nonceStr"],'signature'=>$signPackage["signature"],'url'=>$signPackage["url"]));

$callback = $_GET['callback'];

echo $callback.'('.$tmp.')';

exit;

?>

标签: 微信

顶一下

(0)

0%

踩一下

(0)

0%

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idle不是python自带的开发工具_Python的开发工具

通常情况下&#xff0c;为了提高开发效率&#xff0c;需要使用相应的开发工具。进行Python开发也可以使用开发工具。下面将详细介绍Python自带的IDLE 一使用自带的IDLE 在安装Python后&#xff0c;会自动安装一个IDLE。它是一个Python shell(可以在打开的IDLE窗口的标题栏上看到…

合肥工业大学机器人技术期末_机器人技术第三次作业(HFUT)

第三次作业本人代码水平十分有限&#xff0c;仅供参考&#xff0c;有错误请指出java源码&#xff1a;package robathomework3;import java.lang.Math;//点类class point {double x 0;double y 0;point(double x, double y) {this.x x;this.y y;}void print() {System.out.p…

java se 导原码_Java SE 8新功能导览:Java开发世界中的重大变化

java se 导原码我很自豪&#xff0c;像其他专业团队成员一样&#xff0c;是采用OpenJDK的成员之一&#xff0c;但是从过去8个月就加入了&#xff0c;我们经历了Java SE 8 开发&#xff0c;编译&#xff0c;编码&#xff0c;讨论等各个阶段&#xff0c;直到将其付诸实践为止。 。…

linux将日期和日历信息追加到文件中_Linux任务调度

crontab 任务调度crontab 进行定时任务的设置概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序。任务调度分类&#xff1a;1.系统工作&#xff1a;有些重要的工作必须周而复始地执行&#xff0c;如病毒扫描等 。2.个别用户工作&#xff1a;个别用户可能希望…

android sdk build-tools_从零开始仿写一个抖音App——视频编辑SDK开发(一)

本文首发于微信公众号——世界上有意思的事&#xff0c;搬运转载请注明出处&#xff0c;否则将追究版权责任。交流qq群&#xff1a;859640274。大家好久不见&#xff0c;又有一个多月没有发文章了。不知道还有哪些读者记得我的 从零开始仿写抖音App 的系列文章&#xff0c;这个…

爱默生E系列服务器机柜托盘,艾默生通信电源PS48300-3B/1800 一体化室内机柜

PS48300-3B/1800电源系统PS48300-3B/1800电源系统是艾默生网络能源集多年开发和网上运行经验&#xff0c;采用 DSP控制技术&#xff0c;为满足3G网络需求而设计的高可靠、高功率密度、高性能、全数 字化通信电源系统。根据交流配电和机柜高度。一、特点 1、休眠节能专利技术&am…

功能Java示例 第8部分–更多纯函数

这是第8部分&#xff0c;该系列的最后一部分称为“ Functional Java by Example”。 我在本系列的每个部分中发展的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在上一期文章中&#xff0c;我们已经使用Vavr库看到了一些模式匹配&#xff0c;并且还将故障也视为数据…

tensorflow 小于_坐姿不对,屏幕就变模糊!教你用TensorFlow做一款“隐形背背佳”...

大数据文摘出品作为一个上班族&#xff0c;每天坐在电脑前那么久&#xff0c;难免出现腰酸背痛的情况&#xff0c;时间长了甚至脊柱都歪曲变形了&#xff0c;这可不行&#xff01;一定要克制住自己的坐姿。这里有款“隐形背背佳”&#xff0c;要不要了解一下&#xff1f;一位名…

python处理csv文件列错位_CSV文件分割与列异常处理的python脚本

#codingutf-8 ‘‘‘脚本说明 用来解决csv文件的列异常问题&#xff08;以逗号分隔符为例&#xff09;&#xff1a; csv文件有些列含有换行符、逗号等特殊符号&#xff0c;这就导致csv文件出现列异常的情况。 此脚本将csv文件输出成如下文件&#xff1a;源文件名-正确列-文件序…

文本分类和提取关键词算法_文本内容之间的关键词提取和相似度计算

文本分类和提取关键词算法背景 Web应用程序变得越来越智能。 从网站上使用服务的日子已经一去不复返了&#xff0c;用户不得不填写一个巨大的表格。 假设您有一个适合书迷的网站。 在Web 2.0之前&#xff0c;像这样的网站曾经以诸如年龄&#xff0c;阅读的书籍&#xff0c;喜欢…

python里随机抽取样本_概率分布和抽样分布基础知识及Python实现

本文主要介绍推论统计中的概率分布和抽样分布,本文结构如下: 一、概率分布 随机变量:在一定条件下,某件事情可能发生或者不发生,这个事件就叫随机事件。例如抛硬币哪面朝上。随机变量X就是用来量化随机事件的函数,是将随机事件每一个可能出现的结果映射到数值的一个函数。…

php 创建目录_使用SMB绕过PHP远程文件包含限制

译文声明本文是翻译文章&#xff0c;文章原作者mannulinux&#xff0c;文章来源&#xff1a;mannulinux.org 原文地址&#xff1a;http://www.mannulinux.org/2019/05/exploiting-rfi-in-php-bypass-remote-url-inclusion-restriction.html译文仅供参考&#xff0c;具体内容表达…

eas系统服务器地址,EAS7.0EAS7.5服务端及其客户端标准配置介绍

金蝶EAS是基于JavaEE的大型企业应用。目前服务端支持以下主流软硬件环境。适用版本&#xff1a;EAS7.0 EAS703 EAS7.51.金蝶EAS服务端支持的软硬件环境注&#xff1a;标志为部署支持的环境&#xff0c;可以正常安装配置&#xff0c;但是正式运行前需联系金蝶技术支持。2.客户端…

Java的Kafka:构建安全,可扩展的消息传递应用程序

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 今天尝试Okta。 当今的用户希望可以通过其计算机&#xff0c;手机&#xff0c;平板电脑或任何其他设备访问您的应用程序&#xff01; …

background复合属性顺序_CSS有哪些好用的字体属性?

本文创建于2020年9月&#xff0c;以下为正文&#xff1a;CSS中有哪些字体属性呢&#xff1f;font&#xff1a;复合属性。设置或检索对象中的文本特征。font-style&#xff1a;设置或检索对象中的字体样式。用于定义字体的风格&#xff0c;如&#xff1a;斜体&#xff08;italic…

转译和编译_10个有趣又能编译为JavaScript的语言,你用过哪些?

点击上方“IT平头哥联盟”&#xff0c;选择“置顶或者星标”你的关注意义重大&#xff01;来源&#xff1a;https://www.sitepoint.com/现代应用相比普通的网页有不同的要求。但是浏览器是一个有着一套(大部分)固定可用的技术的平台&#xff0c;JavaScript依然是web应用的核心语…

OPC服务器如何采集设备的信息,如何将OPC服务器采集的设备数据转为MQTT方式,实现云端发布或订阅...

通过与PLC、智能仪表等硬件设备&#xff0c;以及OPC服务器、数据库等软件建立通讯&#xff0c;进行实时数据采集监控&#xff0c;然后将相关数据转换为数据库、OPC&#xff0c;以及MQTT、HTTP等多种服务接口&#xff0c;实现各类自动化与信息化系统软件灵活对接。MQTT智能网关案…

jboss7 关闭日志打印_使用自定义日志记录处理程序在JBoss AS 7中跟踪SQL语句

jboss7 关闭日志打印使用ORM从您的特定数据库中提取数据并让其创建和发布您必须亲自编写的所有SQL语句似乎很方便。 这就是使ORM解决方案受欢迎的原因。 但是它也有一个缺点&#xff1a;由于ORM为您做了很多工作&#xff0c;您在某种程度上失去了对生成SQL的控制&#xff0c;因…

微信小程序摄像头监控_微信必备黑科技小程序!

↑点击上方蓝字关注极物推荐欢迎分享到朋友圈-不花冤枉钱&#xff0c;历史见真谛对于喜欢购物的朋友们&#xff0c;这绝对是一把利器。只需把商品链接复制粘贴到上面&#xff0c;就可以轻松的查阅到该商品的历史价格&#xff0c;轻松直观的了解商品过去的价格波动&#xff0c;同…

无线打印 airprint 服务器,如何让 Windows 的共享打印机支持 AirPrint

对很多办公室环境来说&#xff0c;局域网共享打印机往往都是刚需&#xff0c;而如果局域网内的设备大多为 Windows 设备&#xff0c;通过 网络共享 的方式就可以轻松将所连接的 USB 打印机共享到局域网。但对同一个局域网内的 Apple 设备而言&#xff0c;因为很多打印机的 Mac …