5:我测试的代码及打包下载(加解密、签名系列)

  • • 发表于 8年前
  • • 作者 Roluce
  • • 3786 人浏览
  • • 1 条评论
  • • 最后编辑时间 8年前
  • • 来自 [技 术]

原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处

说明

本案例目的在于测试wx.getUserInfo()得到的encryptedData密文的解密过程。
仅供学习使用。

所有代码打包下载地址:

点击下载(如果失效联系QQ:635068)


1:小程序代码(前台)

test.wxml

//一条代码即可
<button bindtap="tap">tap</button>

test.js

Page({

  //wxml文件,弄一个button按钮即可
  //在console控制台查看数据

  tap: function () {

    //调用登录接口
    wx.login({
      success: function (login) {

        //成功,返回登录凭证js_code
        var js_code = login.code;

        //调用获取用户信息接口
        wx.getUserInfo({
          success: function (res) {

            //成功,获取解密相关的用户信息
            var encryptedData = res.encryptedData; //AES密文
            var iv = res.iv; //AES初始向量

            //调用网络请求接口
            //把js_code、AES密文、AES初始向量发送到服务器
            wx.request({
              url: 'http://jx.qyggame.com/wx.php',
              data: {
                js_code: js_code,
                encryptedData: encryptedData,
                iv: iv
              },
              method: 'GET', //用Get的请求方式
              success: function (data) {

                //成功,返回解密后的用户敏感信息
                console.log(data);
              }
            })
          }
        })
      }
    });
  }
})

2:PHP服务器响应处理代码(后台)

声明:以下代码运行在自己的服务器,必须有PHP环境才可以运行。

下文wx.php导入AES处理类的代码及注释,详见如下文章:
4:官方AES代码(PHP版)代码注释(加解密、签名系列)

wx.php

<?php

    //导入AES处理类
     include_once "aes/wxBizDataCrypt.php";

    //AppID(小程序ID)
    $APPID= "wx138cb9ea9980af75"; 

    //AppSecret(小程序密钥)
    $SECRET = "0d082ea095f1df6aef3f2300fdbe0147"; 

    //接收小程序端发来的js_code
    $js_code = $_GET[js_code];

    //小程序接口(appid+secret+js_code=sessionId+openId)
    $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$APPID}&secret={$SECRET}&js_code={$js_code}&grant_type=authorization_code";


    //模拟网页的GET请求
    $timeout = 5; 
    $ch = curl_init();                              //初始化curl   
    curl_setopt($ch, CURLOPT_URL, $url);            //设置访问的url地址   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    //参数为1表示传输数据,为0表示直接输出显示。 
    curl_setopt($ch, CURLOPT_HEADER, 0);            //参数为0表示不带头文件,为1表示带头文件  

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);   //获取https需要加上此
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);   //获取https需要加上此

    $json_data = curl_exec($ch);   //执行命令并把获取的数据赋值给$output
    curl_close($ch);            //关闭URL请求   


    //返回的Json数据转换成数组 
    $array = json_decode($json_data,true);

    //获得session_key
    $session_key =$array['session_key'];  



      //获取小程序发送来的AES用到的“密文”
     $encryptedData = $_GET[encryptedData]; 

     //获取小程序发送来的AES用到的“初始向量”
     $iv = $_GET[iv];                         


    //调用官方提供的AES处理类,并初始化
    $pc = new WXBizDataCrypt($APPID, $session_key);

    //对密文的解密
    $errCode = $pc->decryptData($encryptedData, $iv, $data );





    if ($errCode == 0) {  
            //0表示正常,返回敏感数据
            //本源码仅为测试,一般敏感信息不必返回微信小程序客户端
            echo $data;  
    } else {
        //不为0,返回错误代码
            echo $errCode;
    } 


?>
分享到:
1条评论
Ctrl+Enter
作者

Roluce

Roluce

APP:0 帖子:50 回复:112 积分:3610

已加入社区[2936]天

山东_聊城_qq:635068

作者详情》
Top