JS-SDK使用权限签名算法----调用c++后台服务进行签名认证-程序员宅基地

技术标签: c++  权限签名  js-sdk  杂笔  

1. 根据appid和appsecrt获得access_token

http请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

2. 根据拿到的access_token获取jsapi_ticket

用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

3. 根据微信开发者文档里的说明,生成签名https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

微信提供了java php python等语言算法说明,但没有c/c++语言的。这里列出c++语言微信签名算法

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <openssl/sha.h>
#include <time.h>
//1、获取当前页面url
string url
//2、获取jsapi_ticket
string jsapi_ticket(注意有次数限制,在本地缓存)
//3、利用boost获取随机字符串
    string nonce_str("");
    boost::uuids::random_generator rgen;
    boost::uuids::uuid u4 = rgen();
    nonce_str = to_string(u4);
//4、获取时间戳
    time_t now_time;
    time ( &now_time );
    ostringstream os;
    os<<now_time;
    string timestamp;
    istringstream is(os.str());
    is>>timestamp;
//5、生成签名字符串
    string signature = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str+ "&timestamp=" + timestamp + "&url=" + url;
//6、利用SHA进行加密
    unsigned char digest[SHA_DIGEST_LENGTH];
    SHA_CTX ctx;
    SHA1_Init(&ctx);
    SHA1_Update(&ctx, signature.c_str(), strlen(signature.c_str()));
    SHA1_Final(digest, &ctx);


    char mdString[SHA_DIGEST_LENGTH*2+1];
    for (int i = 0; i < SHA_DIGEST_LENGTH; i++)
        sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);


    string signature_sha(mdString);

利用微信提供的工具进行验证:
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/diliuxiaozu/article/details/78597876

智能推荐

PyQt5+Qt designer实战_qtdesigner 设计计算器后按数字无反应python-程序员宅基地

文章浏览阅读8.3w次,点赞29次,收藏284次。PyQt5+Qt designer 制作计算器配置说明:Anaconda 4.2.0 (64-bit)Python 3.5.2首先,在Qt designer里面设计界面:打开 Qt designer后,设计界面如下所示:保存为clat.ui。然后将其转为py文件:之后会生产clat.py文件。打开后,代码如下:# -*- coding: utf-8..._qtdesigner 设计计算器后按数字无反应python

cocosCreator笔记 之Android打包_cocos打包安卓apk-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏2次。cocosCreator android 3.4打包配置_cocos打包安卓apk

【论文笔记】TinyBERT: Distilling BERT for Natural Language Understanding_tinybert论文-程序员宅基地

文章浏览阅读333次。To accelerate inference and reduce model size while maintaining accuracy, we first propose a novel Transformer distillation method that is specially designed for knowledge distillation (KD) of the Transformer-based models. Then, we introduce a new two-sta._tinybert论文

去后台数据,根据id重新排序_dxj0000-程序员宅基地

文章浏览阅读1.9k次。var Info = [{"bMatchId": "3771","MatchDate": "2018-07-05 17:00:00",}, {"bMatchId": "3772","MatchDate": "2018-07-05 18:00:00",}, {"bMatchId": "37..._dxj0000

HTTP Status 400 - Required CommonsMultipartFile parameter 'files' is not present_required commonsmultipartfile parameter 'file' is -程序员宅基地

文章浏览阅读4.2k次。HTTP Status 400 - Required CommonsMultipartFile parameter 'files' is not presenttype Status reportmessage Required CommonsMultipartFile parameter 'files' is not presentdescription The request se_required commonsmultipartfile parameter 'file' is not present

linux设置环境变量java_home,Linux下修改和设置环境变量JAVA_HOME的三种方法-程序员宅基地

文章浏览阅读4.1k次。1. 永久修改,对所有用户有效# vi /etc/profile//按键盘[Shift + g], 在profile文件最后添加下面的内容:export JAVA_HOME = /home/myuser/jdk1.7.0_03export PATH = $JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/l..._export path=$java_home/bin:$path

随便推点

深度学习相关概念:过拟合与欠拟合_过拟合和欠拟合-程序员宅基地

文章浏览阅读2.2w次,点赞49次,收藏391次。深度学习相关概念:过拟合与欠拟合1.过拟合与欠拟合2.应对过拟合2.1最优方案2.1次优方案2.1.1L2正则化2.1.2Dropout 随机失活3.应对欠拟合3.1解决方案:  在神经网络中,我们常常听到过拟合与欠拟合这2个名词,他们到底是什么意思呢?1.过拟合与欠拟合  过拟合:  是指学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象。这种情况下模型可能只是记住了训练集数据,而不是学习到了数据特征。  欠拟合:  模型描述能力太弱,以至于_过拟合和欠拟合

Oracle入门精读78-Oracle时间加减操作(add_months)_oracle add_second-程序员宅基地

文章浏览阅读2.2k次。原有时间上增加10秒SQL&gt; create table test_date1(id varchar2(10), operate_time date);insert into test_date1 values('1',sysdate);select * from test_date1SQL&gt; update test_date1 set operate_time = ..._oracle add_second

Qt开发系列3——如何高效的调用界面里面涉及的一些控件,例如获得滑块的数据_读取qslider上的数据 qt-程序员宅基地

文章浏览阅读624次。Qt界面开发中很重要的就是将界面的交互和程序关联起来,我们设置了信号和槽函数之后,如果我们要在槽函数里面获得一些控件的值,例如滑块QSlider的值。该如何获取。第一就是设置好信号和槽函数,看Qt开发系列1.设置好信号和槽函数之后,在项目的资源文件(.cpp)文件里面编写我们的槽函数。如图1所示。图1我们看到滑块的指针为horizontalSlider。他的前面有一个ui,这个就是我们..._读取qslider上的数据 qt

SurvivalShooter学习笔记(三.敌人移动)_survival shooter-程序员宅基地

文章浏览阅读2.4k次。1.敌人和玩家若存活,敌人始终朝着玩家所在位置移动,所以要给玩家物体一个Tag:Player从而找到玩家2.敌人的自动寻路使用Unity自带的NavMeshAgent寻路组件寻路,要先把场景中不动的物体勾选Static,然后Navigation-Bake烘焙移动 代码如下: public class EnemyMovement : MonoBehaviour { _survival shooter

图像处理(一)-程序员宅基地

文章浏览阅读79次。图像处理最主要有两种模型:RGB模型和HSI模型RGB模型表示Red、Green、Blue,由红绿蓝三种颜色表示一个像素点。灰度的转化公式为gray= 0.212671R+0.715160G+0.072169BHSI模型(Hue-Saturation-Intensity),即色调、饱和度、强度模型色调H的角度范围为[0,2π],其中,纯红色的角度为0,纯绿色的角度为2π..._di 图像处理

[转]http://www.russbishop.net/xcode-exception-breakpoints-程序员宅基地

文章浏览阅读114次。原文:http://www.russbishop.net/xcode-exception-breakpointsMany people are not aware of Xcode's powerful features for managing breakpoints during debugging. One such feature is the Exception breakpoint. ...