[TOC]
# 什么是JSSDK
就是微信幫助我們完成的JS一個工具的封裝,直接調用這些接口就可以完成相應的功能。
作用:
* 自定義分享的鏈接(此鏈接也是有規定,如公眾后臺設置有效域名一致)
* 調用一些手機底層應用,攝像頭,獲取網絡制式
開發5步驟:
* 平臺綁定授權域名
* 引入公眾平臺jssdk的js文件
* 根據官方簽名算法編寫出對就的簽名字符串
* 設置前臺script中的config接口配置注入權限驗證
* 通過前臺script中的接口提供的ready方法處理成功驗證
# JSSDK綁定域名
在開發測試平臺添加綁定域名

一定要添加上授權域名,不然不能進行下一步的操作
# JSSDK使用步驟
## 引入js文件


## 生成簽名算法
### 得到jsapi_ticket

在主動模式那寫
~~~
// 得到jsapi_ticket
public function getTicket(){
$url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token='.$this->getAccessToken();
//http_request是封裝的
$json = $this->http_request($url);
$arr = json_decode($json,true);
//這就是jsapi_ticket
// echo $arr['ticket'];
return $arr['ticket'];
}
~~~
我們主動訪問這個方法
## 生成簽名

~~~
// 生成隨機字符串
private function noncestr(int $len = 16)
{
$str = 'abcdefghigklmfsafjw;fjwefwefh';
$str = md5($str);
$str = str_shuffle($str);
return substr($str, 0, $len);
}
// 獲取當前的url地址
private function getCurrentUrl()
{
//$_SERVER['REQUEST_SCHEME']只在部分環境里被支持
// return $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
//添加邏輯,先檢測$_SERVER['REQUEST_SCHEME']存不存在isset($_SERVER['REQUEST_SCHEME']),然后不存在的時候怎么處理
return 'http' . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
// 完成簽名
public function signature()
{
$ticket = $this->getTicket();
$noncestr = $this->noncestr();
$time = time();
$url = $this->getCurrentUrl();
$str = 'jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s';
$str = sprintf($str, $ticket, $noncestr, $time, $url);
$signature = sha1($str);
// print_r([
// 'appid' => self::APPID,
// 'ticket' => $ticket,
// 'noncestr' => $noncestr,
// 'time' => $time,
// 'url' => $url,
// 'signature' => $signature,
// ]);
return [
'appid' => self::APPID,
'ticket' => $ticket,
'noncestr' => $noncestr,
'time' => $time,
'url' => $url,
'signature' => $signature,
];
}
~~~
~~~
/**
* 主動模式
*/
$wx = new Wechat();
$wx->signature();
~~~
## 通過config接口注入權限驗證

我們在一個頁面中寫
~~~
<?php
include '../Wechat.php';
$wx = new Wechat();
$config = $wx->signature();
?>
<!doctype html>
<html lang="zh-Hans">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>砍一刀</title>
<script src = "./js/jweixin-1.4.0.js"></script>
<script>
// 權限配置驗證
wx.config({
debug: true, // 開啟調試模式,開debug會彈窗,false就看控制臺了
appId: '<?php echo $config['appid']; ?>', // 必填,公眾號的唯一標識
timestamp: <?php echo $config['time']; ?>, // 必填,生成簽名的時間戳
nonceStr: '<?php echo $config['noncestr']; ?>', // 必填,生成簽名的隨機串
signature: '<?php echo $config['signature']; ?>',// 必填,簽名
jsApiList: [ // 權限
] // 必填,需要使用的JS接口列表,我們先不填先看一下
});
</script>
</head>
<body>
</body>
</html>
~~~
我們先不注入權限,我們把調試模式設置為true,false的話就要在控制臺看,然后在微信調試工具那,輸入這個頁面的地址,會看到

## 通過ready接口處理成功驗證
注意要注入權限了
~~~
<?php
include '../Wechat.php';
$wx = new Wechat();
$config = $wx->signature();
?>
<!doctype html>
<html lang="zh-Hans">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>砍一刀</title>
<script src = "./js/jweixin-1.4.0.js"></script>
<script>
// 權限配置驗證
wx.config({
debug: false, // 開啟調試模式
appId: '<?php echo $config['appid']; ?>', // 必填,公眾號的唯一標識
timestamp: <?php echo $config['time']; ?>, // 必填,生成簽名的時間戳
nonceStr: '<?php echo $config['noncestr']; ?>', // 必填,生成簽名的隨機串
signature: '<?php echo $config['signature']; ?>',// 必填,簽名
jsApiList: [ // 權限
'onMenuShareAppMessage',
'onMenuShareTimeline',
'chooseImage'
] // 必填,需要使用的JS接口列表
});
// 驗證成功后我們要處理的動作
wx.ready(function(){
// 分享給好友
wx.onMenuShareAppMessage({
title: '分享給好友標題', // 分享標題
desc: '享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致', // 分享描述
link: '<?php echo $config['url']; ?>', // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
imgUrl: 'http://ns9aum.natappfree.cc/qrcode.jpg', // 分享圖標
type: 'link', // 分享類型,music、video或link,不填默認為link
dataUrl: '', // 如果type是music或video,則要提供數據鏈接,默認為空
success: function () {
// 用戶點擊了分享后執行的回調函數
alert('成功');
}
});
// 自定義分享到朋友圈
wx.onMenuShareTimeline({
title: '自定義分享到朋友圈標題', // 分享標題
link: '<?php echo $config['url']; ?>',
imgUrl: 'http://ns9aum.natappfree.cc/qrcode.jpg', // 分享圖標
success: function () {
// 設置成功
alert('分享成功');
}
});
wx.chooseImage({
count: 1, // 默認9
sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有
sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有
success: function (res) {
var localIds = res.localIds; // 返回選定照片的本地ID列表,localId可以作為img標簽的src屬性顯示圖片
alert(localIds);
}
});
});
</script>
</head>
<body>
<h1>微信分享,jssdk</h1>
</body>
</html>
~~~
- 配置
- composer安裝
- composer用法
- composer版本約束表達
- phpstorm
- sftp文件同步
- php類型約束
- laradock
- 配置文件緩存詳解
- git
- 自定義函數
- 核心概念
- IOC
- 服務提供者
- Facade
- 契約
- 生命周期
- 路由
- 請求
- 命名路由
- 路由分組
- 資源路由
- 控制器路由
- 響應宏
- 響應
- Command
- 創建命令
- 定時任務
- console路由
- 執行用戶自定義的定時任務
- artisan命令
- 中間件
- 創建中間件
- 使用中間件
- 前置和后置
- 詳細介紹
- 訪問次數限制
- 為 VerifyCsrfToken 添加過濾條件
- 單點登錄
- 事件
- 創建
- ORM
- 簡介
- DB類
- 配置
- CURD
- queryScope和setAttribute
- 查看sql執行過程
- 關聯關系
- 一對一
- 一對多
- 多對多
- 遠程關聯
- 多態一對多
- 多態多對多
- 關聯數據庫的調用
- withDefault
- 跨模型更新時間戳
- withCount,withSum ,withAvg, withMax,withMin
- SQL常見操作
- 模型事件
- 模型事件詳解
- 模型事件與 Observer
- deleted 事件未被觸發
- model validation
- ORM/代碼片段
- Repository模式
- 多重where語句
- 中間表類型轉換
- Collection集合
- 新增的一些方法
- 常見用法
- 求和例子
- 機場登機例子
- 計算github活躍度
- 轉化評論格式
- 計算營業額
- 創建lookup數組
- 重新組織出表和字段關系并且字段排序
- 重構循環
- 其他例子
- 其他問題一
- 去重
- 第二個數組按第一個數組的鍵值排序
- 搜索ES
- 安裝
- 表單
- Request
- sessiom
- Response
- Input
- 表單驗證
- 簡介
- Validator
- Request類
- 接口中的表單驗證
- Lumen 中自定義表單驗證返回消息
- redis
- 廣播事件
- 發布訂閱
- 隊列
- 守護進程
- redis隊列的坑
- beanstalkd
- rabbitmq
- redis隊列
- 日志模塊
- 錯誤
- 日志詳解
- 數據填充與遷移
- 生成數據
- 數據填充seed
- migrate
- 常見錯誤
- Blade模板
- 流程控制
- 子視圖
- URL
- 代碼片段
- Carbon時間類
- 一些用法
- 郵件
- 分頁
- 加密解密
- 緩存
- 文件上傳
- 優化
- 隨記
- 嵌套評論
- 判斷字符串是否是合法的 json 字符串
- 單元測試
- 計算出兩個日期的diff
- 自定義一個類文件讓composer加載
- 時間加減
- 對象數組互轉方法
- 用戶停留過久自動退出登錄
- optional 輔助方法
- 文件下載
- Api
- Dingo api
- auth.basic
- api_token
- Jwt-Auth
- passport
- Auth
- Authentication 和 Authorization
- Auth Facade
- 授權策略
- Gates
- composer包
- debug包
- idehelp包
- image處理
- 驗證碼
- jq插件
- 第三方登錄
- 第三方支付
- log顯示包
- 微信包
- xss過濾
- Excel包
- MongoDB
- php操作
- 聚合查詢
- 發送帶附件郵件
- 中文轉拼音包
- clockwork網頁調試
- emoji表情
- symfony組件
- swooletw/laravel-swoole
- 常見問題
- 跨域問題
- Laravel隊列優先級的一個坑
- cache:clear清除緩存問題
- .env無法讀取
- 源碼相關基礎知識
- __set和__get
- 依賴注入、控制反轉和依賴倒置原則
- 控制反轉容器(Ioc Container)
- 深入服務容器
- call_user_func
- compact
- 中間件簡易實現
- array_reduce
- 中間件實現代碼
- Pipeline管道操作
- composer自動加載
- redis延時隊列
- 了解laravel redis隊列
- cli
- 源碼解讀
- Facade分析
- Facade源碼分析
- IOC服務容器
- 中間件原理
- 依賴注入淺析
- 微信
- 微信公眾號
- 常用接收消息
- 6大接收接口
- 常用被動回復消息
- 接口調用憑證
- 自定義菜單
- 新增素材
- 客服消息
- 二維碼
- 微信語音
- LBS定位
- 網頁授權
- JSSDK
- easywechat
- 小程序
- 小程序配置app.json