ZLW-PC\Administrator
7 years ago
10 changed files with 348 additions and 6 deletions
-
26resources/org/wxJsSdk/README.txt
-
2resources/org/wxJsSdk/access_token.php
-
42resources/org/wxJsSdk/demo.php
-
2resources/org/wxJsSdk/jsapi_ticket.php
-
134resources/org/wxJsSdk/jssdk.php
-
2resources/views/weixin/address/userAddressAdd.blade.php
-
41resources/views/weixin/cart/cartCheckout.blade.php
-
101resources/views/weixin/common/wxshare.blade.php
-
2resources/views/weixin/user/login.blade.php
-
2resources/views/weixin/user/register.blade.php
@ -0,0 +1,26 @@ |
|||
|
|||
微信JS-SDK DEMO |
|||
|
|||
DEMO页面: |
|||
http://demo.open.weixin.qq.com/jssdk |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,2 @@ |
|||
<?php exit();?>
|
|||
{"access_token":"","expire_time":0} |
@ -0,0 +1,42 @@ |
|||
<?php |
|||
require_once "jssdk.php"; |
|||
$jssdk = new JSSDK("yourAppID", "yourAppSecret"); |
|||
$signPackage = $jssdk->GetSignPackage(); |
|||
?>
|
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<title></title> |
|||
</head> |
|||
<body> |
|||
|
|||
</body> |
|||
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> |
|||
<script> |
|||
/* |
|||
* 注意: |
|||
* 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 |
|||
* 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。 |
|||
* 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html |
|||
* |
|||
* 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈: |
|||
* 邮箱地址:weixin-open@qq.com |
|||
* 邮件主题:【微信JS-SDK反馈】具体问题 |
|||
* 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。 |
|||
*/ |
|||
wx.config({ |
|||
debug: true, |
|||
appId: '<?php echo $signPackage["appId"];?>', |
|||
timestamp: <?php echo $signPackage["timestamp"];?>,
|
|||
nonceStr: '<?php echo $signPackage["nonceStr"];?>', |
|||
signature: '<?php echo $signPackage["signature"];?>', |
|||
jsApiList: [ |
|||
// 所有要调用的 API 都要加到这个列表中
|
|||
] |
|||
}); |
|||
wx.ready(function () { |
|||
// 在这里调用 API
|
|||
}); |
|||
</script> |
|||
</html> |
@ -0,0 +1,2 @@ |
|||
<?php exit();?>
|
|||
{"jsapi_ticket":"","expire_time":0} |
@ -0,0 +1,134 @@ |
|||
<?php |
|||
class JSSDK |
|||
{ |
|||
private $appId; |
|||
private $appSecret; |
|||
|
|||
public function __construct($appId, $appSecret) |
|||
{ |
|||
$this->appId = $appId; |
|||
$this->appSecret = $appSecret; |
|||
} |
|||
|
|||
public function getSignPackage() |
|||
{ |
|||
$jsapiTicket = $this->getJsApiTicket(); |
|||
|
|||
// 注意 URL 一定要动态获取,不能 hardcode.
|
|||
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; |
|||
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; |
|||
|
|||
$timestamp = time(); |
|||
$nonceStr = $this->createNonceStr(); |
|||
|
|||
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
|
|||
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$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($this->get_php_file("jsapi_ticket.php")); |
|||
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; |
|||
$this->set_php_file("jsapi_ticket.php", json_encode($data)); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
$ticket = $data->jsapi_ticket; |
|||
} |
|||
|
|||
return $ticket; |
|||
} |
|||
|
|||
private function getAccessToken() |
|||
{ |
|||
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
|
|||
$data = json_decode($this->get_php_file("access_token.php")); |
|||
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; |
|||
$this->set_php_file("access_token.php", json_encode($data)); |
|||
} |
|||
} |
|||
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); |
|||
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
|
|||
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
|
|||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); |
|||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); |
|||
curl_setopt($curl, CURLOPT_URL, $url); |
|||
|
|||
$res = curl_exec($curl); |
|||
curl_close($curl); |
|||
|
|||
return $res; |
|||
} |
|||
|
|||
private function get_php_file($filename) |
|||
{ |
|||
return trim(substr(file_get_contents($filename), 15)); |
|||
} |
|||
|
|||
private function set_php_file($filename, $content) |
|||
{ |
|||
$fp = fopen($filename, "w"); |
|||
fwrite($fp, "<?php exit();?>" . $content); |
|||
fclose($fp); |
|||
} |
|||
} |
@ -0,0 +1,101 @@ |
|||
<?php |
|||
require_once(resource_path('org/wxJsSdk/jssdk.php')); |
|||
$jssdk = new \JSSDK(sysconfig('CMS_WX_APPID'), sysconfig('CMS_WX_APPSECRET')); |
|||
$signPackage = $jssdk->GetSignPackage(); |
|||
?>
|
|||
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> |
|||
<script type="text/javascript"> |
|||
/* |
|||
* 注意: |
|||
* 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 |
|||
* 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。 |
|||
* 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html |
|||
* |
|||
* 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈: |
|||
* 邮箱地址:weixin-open@qq.com |
|||
* 邮件主题:【微信JS-SDK反馈】具体问题 |
|||
* 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。 |
|||
*/ |
|||
wx.config({ |
|||
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
|
|||
appId: '<?php echo $signPackage["appId"];?>', // 必填,公众号的唯一标识
|
|||
timestamp: '<?php echo $signPackage["timestamp"];?>', // 必填,生成签名的时间戳
|
|||
nonceStr: '<?php echo $signPackage["nonceStr"];?>', // 必填,生成签名的随机串
|
|||
signature: '<?php echo $signPackage["signature"];?>', // 必填,签名
|
|||
jsApiList: [ |
|||
// 所有要调用的 API 都要加到这个列表中
|
|||
'onMenuShareTimeline','onMenuShareAppMessage' |
|||
] |
|||
}); |
|||
|
|||
//获取网页描述
|
|||
var meta = document.getElementsByTagName('meta'); |
|||
var share_desc = ''; |
|||
for(i in meta) |
|||
{ |
|||
if(typeof meta[i].name!="undefined"&&meta[i].name.toLowerCase()=="description") |
|||
{ |
|||
share_desc = meta[i].content; |
|||
} |
|||
} |
|||
|
|||
wx.ready(function () { |
|||
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
|
|||
// 在这里调用 API
|
|||
var title=document.title; |
|||
var desc=share_desc; |
|||
var url='{$shareurl}'; //分享链接
|
|||
var img='{$shareimg}'; //分享图标
|
|||
var subscribe='{$subscribe}'; //分享描述
|
|||
|
|||
// 分享给朋友
|
|||
wx.onMenuShareAppMessage({ |
|||
title: title, // 分享标题
|
|||
desc: desc, // 分享描述
|
|||
link: url, // 分享链接
|
|||
imgUrl: img, // 分享图标
|
|||
type: '', // 分享类型,music、video或link,不填默认为link
|
|||
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
|
|||
success: function () { |
|||
// 用户确认分享后执行的回调函数
|
|||
_share_success(); |
|||
}, |
|||
cancel: function () { |
|||
// 用户取消分享后执行的回调函数
|
|||
_share_error(); |
|||
} |
|||
}); |
|||
|
|||
// 分享到朋友圈
|
|||
wx.onMenuShareTimeline({ |
|||
title: title, // 分享标题
|
|||
link: url, // 分享链接
|
|||
imgUrl: img, // 分享图标
|
|||
|
|||
success: function () { |
|||
// 用户确认分享后执行的回调函数
|
|||
_share_success(); |
|||
}, |
|||
cancel: function () { |
|||
// 用户取消分享后执行的回调函数
|
|||
_share_error(); |
|||
} |
|||
}); |
|||
|
|||
wx.error(function(res){ |
|||
console.log(res); |
|||
}); |
|||
|
|||
//分享成功
|
|||
function _share_success() |
|||
{ |
|||
alert('分享成功'); |
|||
} |
|||
|
|||
//分享失败
|
|||
function _share_error() |
|||
{ |
|||
alert('分享失败'); |
|||
} |
|||
}); |
|||
</script> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue