微信小程序 session_key 与 open-type
1.open-type: 写在button 的属性一栏 表示微信开放能力;
具有以下功能:
值 说明 最低版本
contact 打开客服会话,如果用户在会话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息,具体说明 1.1.0
share 触发用户转发,使用前建议先阅读使用指引 1.2.0
getPhoneNumber 获取用户手机号,可以从bindgetphonenumber回调中获取到用户信息,具体说明 1.2.0
getUserInfo 获取用户信息,可以从bindgetuserinfo回调中获取到用户信息 1.3.0
launchApp 打开APP,可以通过app-parameter属性设定向APP传的参数具体说明 1.9.5
openSetting 打开授权设置页 2.0.7
feedback 打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容 2.1.0
2.
session_key 的使用
2.1session_key 主要用作加密解密[我只找到了解密] ;
相关链接 :https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#%E6%96%B9%E5%BC%8F%E4%B8%80%EF%BC%9A%E5%BC%80%E5%8F%91%E8%80%85%E5%90%8E%E5%8F%B0%E6%A0%A1%E9%AA%8C%E4%B8%8E%E8%A7%A3%E5%AF%86%E5%BC%80%E6%94%BE%E6%95%B0%E6%8D%AE
2.2 使用方法:
2.2.1 把示例代码下载 粘贴需要的部分到 项目中 ;
2.2.2 把 WXBizDataCrypt /ErrorCode修改文件名 ,并且修改引用方式 ,带入项目【例如tp5 带入tp5的项目】
2.2.3 把demo 的代码 再带入 项目文件中;
2.3 理解 :
一般是这么个逻辑 : 第一次请求的时候,判断用户登录状态,最好判断场景值 ,然后获得 openid 和 session_key , 存起来
然后 再后台 自己再搞个自己的mysession,两个session 没啥关系;
mysession 用于自己登录状态的判断;
session_key用于对微信接受api 数据时解密 ;
关于判断session_key 是否过期:
其实并不是所有请求 都是跟微信互动 ;
我觉得要跟微信互动 调用微信的api 才有用
wx.qy.checkSession({
success: function(){
//session_key 未过期,并且在本生命周期一直有效
},
fail: function(){
// session_key 已经失效,需要重新执行登录流程
wx.qy.login() //重新登录
}
})
贴项目原demo<?php
namespace app\home\controller;
use think\Controller;
use think\Db;
use think\Request;
use think\Cache;
use think\Config;
use think\Image;
use app\index\model\Wxcode;
use app\home\controller\WXBizDataCrypt;
// 把接收到微信发来都数据 全部存进数据库
class Wx extends Controller
{
public $appid = 'wx55b463a5f4d11789';
public $sessionKey = 'rK8/PzQzw2fPdRta4q+7+g==';
/**
*解密成功
* 注意1:
* 需要在此之前 去检测 session_key 有没有失效
*这个 $data是一个返回值
*/
public function addwxuser()
{
// 获取e,data
$encryptedData = input('encryptedData') ;
$iv = input('iv') ;
$pc = new WXBizDataCrypt($this->appid, $this->sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
print($data . "\n");
} else {
print($errCode . "\n");
}
}
} WXBizDataCrypt.php代码
<?php
/**
* 对微信小程序用户加密数据的解密示例代码.
*
* @copyright Copyright (c) 1998-2014 Tencent Inc.
*/
namespace app\home\controller;
// include_once "errorCode.php";
use app\home\controller\ErrorCode;
class WXBizDataCrypt
{
private $appid;
private $sessionKey;
/**
* 构造函数
* @param $sessionKey string 用户在小程序登录后获取的会话密钥
* @param $appid string 小程序的appid
*/
public function __construct( $appid, $sessionKey)
{
$this->sessionKey = $sessionKey;
$this->appid = $appid;
}
/**
* 检验数据的真实性,并且获取解密后的明文.
* @param $encryptedData string 加密的用户数据
* @param $iv string 与用户数据一同返回的初始向量
* @param $data string 解密后的原文
*
* @return int 成功0,失败返回对应的错误码
*/
public function decryptData( $encryptedData, $iv, &$data )
{
if (strlen($this->sessionKey) != 24) {
return ErrorCode::$IllegalAesKey;
}
$aesKey=base64_decode($this->sessionKey);
if (strlen($iv) != 24) {
return ErrorCode::$IllegalIv;
}
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
$dataObj=json_decode( $result );
if( $dataObj== NULL )
{
return ErrorCode::$IllegalBuffer;
}
if( $dataObj->watermark->appid != $this->appid )
{
return ErrorCode::$IllegalBuffer;
}
$data = $result;
return ErrorCode::$OK;
}
}
ErrorCode.php
<?php
namespace app\home\controller;
/**
* 对微信小程序用户加密数据的返回代码.
* error code 说明.
* <ul>
* <li>-41001: encodingAesKey 非法</li>
* <li>-41003: aes 解密失败</li>
* <li>-41004: 解密后得到的buffer非法</li>
* <li>-41005: base64加密失败</li>
* <li>-41016: base64解密失败</li>
* </ul>
*/
class ErrorCode
{
public static $OK = 0;
public static $IllegalAesKey = -41001;
public static $IllegalIv = -41002;
public static $IllegalBuffer = -41003;
public static $DecodeBase64Error = -41004;
}
?>
页:
[1]