
var ds = e.currentTarget.dataset
var phone = ds.phone,param = ds.param
// var {phone,param} = e.currentTarget.dataset
}})
通过wx.getUserInfo获取用户的openId 和unionId,需要对接口返回的加密数据( encryptedData )进行对称解密。
/**
* 功能描述: <br>
* 〈功能详细描述〉
*
*@paramargs
*@see[相关类/方法](可逗穗兄选)
*@since[产品/模块版本](可选)
*/
publicstaticvoidmain(String[] args){
String encryptedData ="********......*******"
String sessionKey ="********......*******"
String iv ="9btKSYjvtGMGpknPpjS2Ag=="
JSONObject jsonObject = getUserInfo(encryptedData, sessionKey, iv)
System.out.println(jsonObject.getString("unionId"))
System.out.println(jsonObject.toJSONString())
}
结果运行报错:
javax.crypto.BadPaddingException: pad block corrupted
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedGenericBlockCipher.doFinal(Unknown Source)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Cipher.java:2087)
at com.saic.ebiz.service.util.AESUtils.getUserInfo(AESUtils.java:62)
at com.saic.ebiz.service.util.AESUtils.main(AESUtils.java:86)
Exception in thread"main"java.lang.NullPointerException
at com.saic.ebiz.service.util.AESUtils.main(AESUtils.java:87)
查询原因,有可能是我族拦的wx.login在wx.getUserInfo之后调的原因,细究一下
我们通过wx.login获得用户授权码code,接下来我们用code以及appid和appSecret请求微信
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
获取session_key,而sessionKey又是解密encryptedData的密钥,所以一旦我们的wx.login在wx.getUserInfo之后获取,我们redis中存储的sessionKey绝对不是当前获取encryptedData的密钥。所以更改小程序请求顺序,每次请求wx.getUserInfo之前先请求wx.login,同时生成sessionKey放入缓存。而后需要解密的时候就可以正常解密了
特别注意: 让前端看一下你的请求顺序山袭是不是错了
using Systemusing System.Collections.Generic
using System.Text
using System.Text.RegularExpressions
///控制台测试
static void Main(string[] args)
{
#region Student Text
AllStudent all = new AllStudent(3)
all.AddAllreslut()
all.RtAvg()
all.printStu()
all.sorting()
Console.WriteLine("改碰(冒泡排序)排序后成绩如下:")
all.printStu()
#endregion
}
以下是羡谈单个学生类和整体兄歼碰学生类
#region Student类
public class Students
{
#region 构造函数
public Students()
{
}
public Students(string name, string number, float Cres, float Elys, float maths)
{
_name = name
_number = number
_Cres = Cres
_ely = Elys
_math = maths
_avg = (Cres + Elys + maths) / 3
}
#endregion
#region 字段
private string _name
public string Name
{
get { return _name}
set { _name = value}
}
private string _number
public string Number
{
get { return _number}
set { _number = value}
}
private float _Cres
public float Cres
{
get { return _Cres}
set { _Cres = value}
}
private float _ely
public float Ely
{
get { return _ely}
set { _ely = value}
}
private float _math
public float Math
{
get { return _math}
set { _math = value}
}
private float _avg
public float Avg
{
get { return _avg}
set { _avg = value}
}
#endregion
}
#endregion
#region 全体学生类
public class AllStudent
{
#region 构造函数
public AllStudent(int cout)
{
_cout = cout
_stuList = new List<Students>()
}
#endregion
#region 字段和属性
private int _cout
public int Cout
{
get { return _cout}
set { _cout = value}
}
private List<Students>_stuList
public List<Students>StuList
{
get { return _stuList}
set { _stuList = value}
}
#endregion
#region 学生成绩录入方法
public void AddAllreslut()
{
for (int i = 0i <_couti++)
{
string[] strs = new string[5]
Console.WriteLine("请输入学生姓名:")
strs[0] = Console.ReadLine()
Console.WriteLine("请输入学生学号:")
strs[1] = Console.ReadLine()
Console.WriteLine("请输入学生C++成绩:")
strs[2] = Console.ReadLine()
if (!Isfloat(strs[2]))
{
Console.WriteLine("请输入正确的成绩:")
strs[2] = Console.ReadLine()
}
else
{
if (float.Parse(strs[2]) >100)
{
Console.WriteLine("请输入正确的成绩:")
strs[2] = Console.ReadLine()
}
}
Console.WriteLine("请输入学生英语成绩:")
strs[3] = Console.ReadLine()
if (!Isfloat(strs[3]))
{
Console.WriteLine("请输入正确的成绩:")
strs[3] = Console.ReadLine()
}
else
{
if (float.Parse(strs[3]) >100)
{
Console.WriteLine("请输入正确的成绩:")
strs[3] = Console.ReadLine()
}
}
Console.WriteLine("请输入学生数学成绩:")
strs[4] = Console.ReadLine()
if (!Isfloat(strs[4]))
{
Console.WriteLine("请输入正确的成绩:")
strs[4] = Console.ReadLine()
}
else
{
if (float.Parse(strs[4]) >100)
{
Console.WriteLine("请输入正确的成绩:")
strs[4] = Console.ReadLine()
}
}
Students student = new Students(strs[0], strs[1], float.Parse(strs[2]), float.Parse(strs[3]), float.Parse(strs[4]))
Console.WriteLine(strs[0] + "同学的平均成绩为:" + student.Avg)
Console.WriteLine()
_stuList.Add(student)
}
}
#endregion
#region 按学号查询平均成绩
public void RtAvg()
{
Console.WriteLine("请输入要查询平均成绩学生的学号:")
string number = Console.ReadLine()
float avg = RtAvg(number)
if (avg != 0)
{
Console.WriteLine(number + "的平均成绩为:" + avg)
Console.ReadKey()
}
else
{
Console.WriteLine("没有该学号学生成绩!")
Console.ReadKey()
}
}
public float RtAvg(string number)
{
for (int i = 0i <_stuList.Counti++)
{
if (_stuList[i].Number.Trim() == number.Trim())
{
return _stuList[i].Avg
}
}
return 0
}
#endregion
#region 按平均分排序方法
public void sorting()
{
List<Students>list = new List<Students>()
for (int i = 0i <_stuList.Counti++)
{
Students stus = new Students()
for (int j = 0j <_stuList.Count - i - 1j++)
{
if (_stuList[j].Avg >_stuList[j + 1].Avg)
{
stus = _stuList[j]
_stuList[j] = _stuList[j + 1]
_stuList[j + 1] = stus
}
else
{
stus = _stuList[j + 1]
}
}
if (i == _stuList.Count - 1)
{
stus = _stuList[0]
}
list.Add(stus)
}
_stuList = list
}
#endregion
#region 输出所有学生成绩
public void printStu()
{
Console.WriteLine("一下是所有学生信息:")
for (int i = 0i <_stuList.Counti++)
{
Console.WriteLine(_stuList[i].Name + "同学的基本信息:")
Console.WriteLine("学号:" + _stuList[i].Number + " C++成绩为:" + _stuList[i].Cres + " 英语成绩为:" + _stuList[i].Ely + " 数学成绩为:" + _stuList[i].Math+" 平均成绩为:"+_stuList[i].Avg)
Console.WriteLine()
}
Console.ReadKey()
}
#endregion
#region 验证浮点数方法
public static bool Isfloat(string Input)
{
if (Input == null)
{
return false
}
else
{
string pattern = "^(\\d*\\.)?\\d+$"
if (Regex.Match(Input, pattern, RegexOptions.Compiled).Success)
{
return true
}
else
{
return false
}
}
}
#endregion
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)