获取客户 openId 和 unionId 需要以下步骤(都为必须步骤)

1.从验证从客户端传上来code, 获取sessionKey (需要配合小程序appid ,secret 发送到微信服务器)

$params = [
'appid' => $this->appid,
'secret' => $this->secret,
'js_code' => $this->code,
'grant_type' => $this->grant_type
];

2.获取到微信服务器 返回信息
(通过客户端传来的 原始数据 + 获取的sessionKey 与客户端传来的 签名对比)

$signature = sha1($this->rawData . $this->sessionKey);
if ($signature !== $this->signature){
return $this->ret_message("signNotMatch"."sessionKey 签名不匹配");
}

3.重要环节:

通过 服务器返回的 session_key 解密 客户端上传的加密数据

/* 3.通过 服务器返回的 session_key 解密 客户端上传的加密数据
* 需要参数
* [
"appid"=>$this->appid,
"sessionKey"=>$sessionKey,
"encryptedData"=>$this->encryptedData,
"iv"=>$this->iv,
];
*/

坑:客户端上传的 encryptedData 需要用encodeURIComponent方法进行URL编码,对应服务端需要URL解码

坑:客户端上传的 encryptedData 需要用encodeURIComponent方法进行URL编码,对应服务端需要URL解码

坑:客户端上传的 encryptedData 需要用encodeURIComponent方法进行URL编码,对应服务端需要URL解码

重要的事情说三遍!

小程序:

encodeURIComponent(data.encryptedData);//一定要把加密串转成URL编码

对应服务端需要进行URL解码 否则出现解密结果 为NULL的错误

服务端

<?php
//php 端接受数据 时做url解码
$encryptedData=urldecode($_GET["encryptedData"]);

小程序Openid 获取,服务器 encryptedData 解密 遇到的坑的更多相关文章

  1. 微信小程序java8 java7 java6 encryptedData 解密 异常处理

    使用java8 java7  java6 解密微信小程序encryptedData可以回遇到一些错误 1.java.security.NoSuchAlgorithmException: Cannot ...

  2. nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId

    nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId 前言: 我准备用nodejs+koa+uniapp实现一款餐饮点单小程序,以及nodejs+koa+vue实现后端管理 ...

  3. SpringBoot 获取微信小程序openid

    最近做一个项目用到小程序,为了简化用户啊登录,通过获取小程序用户的openid来唯一标示用户. 1.官方教程 2.具体步骤 3.具体实现 4.可能出现的错误 5.代码下载 1.官方教程 先来看看官方怎 ...

  4. 微信小程序如何获取openid

    微信小程序如何获取openid wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId // ...

  5. Java 获取小程序openid(基于SpringBoot)

    Java 获取小程序openid(基于SpringBoot) 官方文档 wx.login 1.引入Request封装依赖 <!--Request依赖--> <dependency&g ...

  6. 小程序如何获取code

    小程序如何获取code <button open-type="getUserInfo" hover-class='none' bindgetuserinfo="ge ...

  7. 微信小程序后台获取用户的opeid

    1.微信小程序后台获取登录用户的openid,首先微信小程序将code传给后台服务器 wx.login({ success: function (res) { var code = res.code ...

  8. java独立小程序实现AES加密和解密

    一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...

  9. 微信小程序验证码获取倒计时

    wxml <button disabled='{{disabled}}' bindtap="goGetCode">{{code}}</button> js ...

随机推荐

  1. Scrum 项目准备4.0

    4.0----------------------------------------------- 1.准备看板. 形式参考图4. 2.任务认领,并把认领人标注在看板上的任务标签上. 先由个人主动领 ...

  2. linux 下svn忽略文件

    假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录),如果报错请看下面 3. 打开的文件就是忽 ...

  3. perf的采样模式和统计模式

    perf的采样模式和统计模式 统计模式和采样模式使用寄存器的方法不相同; 在统计模式下,每次调度之前设置寄存器,调度之后清理寄存器,留个下个进程使用;PMU寄存器的使用方法; 在采样模式下,每次 pm ...

  4. Visual Studio 中设置npm

    VS2017自带的npm会去国外的镜像下载文件, 奇慢无比, 还是马云家淘宝的镜像适合国内用户. 淘宝npm镜像地址:  https://registry.npm.taobao.org VS中使用淘宝 ...

  5. HDU4802_GPA

    水题. #include <iostream> #include <cstdio> #include <cstring> using namespace std; ...

  6. HDU4043_FXTZ II

    题目描述的意思就不说了,自己考虑的时候就是在所有的排列中,碰到大于前面最大的出现数字的时候就乘以一个二分之一,然后求和. 打表后就会发现,答案分子为1*3*5*……*(2*n-1):分母为2*4*6* ...

  7. QoS专题-第3期-QoS实现之报文简单分类与标记

    QoS实现之报文简单分类与标记 上一期专题我们讲到,MQC中的流分类可以实现报文的分类,流行为可以对报文进行重标记,从而实现对流量的精细化差分服务.而优先级映射则可以根据802.1p优先级.DSCP优 ...

  8. P3916 图的遍历

    题目描述 给出 NNN 个点, MMM 条边的有向图,对于每个点 vvv ,求 A(v)A(v)A(v) 表示从点 vvv 出发,能到达的编号最大的点. 输入输出格式 输入格式: 第1 行,2 个整数 ...

  9. Redis Scan迭代器遍历操作原理(一)

    Redis在2.8.0版本新增了众望所归的scan操作,从此再也不用担心敲入了keys*, 然后举起双手看着键盘等待漫长的系统卡死了··· 命令的官方介绍在这里, 中文版由huangz同学细心翻译了, ...

  10. ORACLE 中如何截取到时间的年月日中的年、月、日

    在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来,并不是一件难事.常用的方法是:Select to_number(to_char(sysdate,'yyyy')) from d ...