`

微信JSSDK接口 - 生成签名

 
阅读更多

 

微信上传下载图片功能若想使用JS-SDK接口,首先需要通过wx.config接口进行权限验证,其中参数appId、timestamp、nonceStr、signature、jsApiList需要进行赋值。

 

wx.config({
    debug: false,
    appId: 'wxe49d******43c1cd',
    timestamp: timestamp,
    nonceStr: nonceStr,
    signature: signature,
    jsApiList: ["chooseImage","previewImage","uploadImage","downloadImage"]
});
  
一、获取access_token
       access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。可以通过AppID和SECRET调用本接口来获取access_token。AppID和SECRET可在微信公众平台开发者中心页中获得。 
def getAccessToken()
{
    def APPID = ""
    def SECRET = ""
    
    URL url = new URL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET")
    def params = "APPID=" + URLEncoder.encode(APPID, 'UTF-8') + "&SECRET=" + URLEncoder.encode(SECRET, 'UTF-8')

    HttpURLConnection connection = (HttpURLConnection) url.openConnection()
    connection.setDoOutput(true)
    connection.setRequestMethod("POST")
    connection.outputStream.withWriter { Writer writer -> writer.write params }
    def response = connection.inputStream.withReader { Reader reader -> reader.text }
    def accessToken = JSON.parse(response).getAt("access_token")     
    return accessToken
}  
 注:access_token的有效期7200秒,所以必须在自己的服务全局缓存access_token值
 

二、获取jsapi_ticket

       jsapi_ticket是公众号用于调用微信JS接口的临时票据,通过access_token来获取。

def getTicket(String accessToken)
{
    URL url = new URL("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi")
    def params = "ACCESS_TOKEN=" + URLEncoder.encode(accessToken, 'UTF-8')

    HttpURLConnection connection = (HttpURLConnection) url.openConnection()
    connection.setDoOutput(true)
    connection.setRequestMethod("POST")
    connection.outputStream.withWriter { Writer writer -> writer.write params }
    def response = connection.inputStream.withReader { Reader reader -> reader.text }
    def ticket = JSON.parse(response).getAt("ticket")
    return ticket
}

 注:jsapi_ticket的有效期为7200秒,由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,所以必须在自己的服务全局缓存jsapi_ticket值

 
三、生成signature签名
       签名生成规则:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分)。对所有待签名参数按照字段名的ASCII 码从小到大排序后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
def wxGetConfigParams()
{
    def access_token = getAccessToken()
    def jsapi_ticket = getTicket(access_token)
    def nonceStr = UUID.randomUUID().toString()
    def time = (System.currentTimeMillis() / 1000).toString()
    def timestamp = time.substring(0, time.lastIndexOf("."))
    def url = request.getRequestURL()
    def signature = getSignature(jsapi_ticket, nonceStr, timestamp, url.toString())
    
    // TODO
    // 将access_token、jsapi_ticket缓存到全局变量中
    // 将signature、nonceStr、timestamp带回到页面
}
  
def getSignature(String jsapi_ticket, String nonce_str, String timestamp, String url)
{
    def string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "&timestamp=" + timestamp + "&url=" + url
    MessageDigest crypt = MessageDigest.getInstance("SHA-1")
    crypt.reset()
    crypt.update(string1.getBytes("UTF-8"))
    byteToHex(crypt.digest())
}
 
def byteToHex(final byte[] hash)
{
    Formatter formatter = new Formatter()
    for (byte b :hash)
    {
        formatter.format("%02x", b)
    }
    formatter.toString()
}
 注:
(1)签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同
(2)签名用的url必须是调用JS接口页面的完整URL
(3)处于安全考虑,开发者必须在服务器实现签名的逻辑
 
分享到:
评论

相关推荐

    微信JSSDK-PHP版,分享朋友圈分享朋友DEMO,js-weixin-1.4.0版,有使用说明

    1. **微信JSSDK**:JSSDK提供了多种功能接口,包括获取微信用户基本信息、分享、扫一扫、支付、地理位置、摇一摇等。通过在网页中引入JSSDK的JS库,并配置好对应的接口权限,可以实现丰富的交互体验。 2. **PHP后端...

    详解vue中使用微信jssdk

    jsApiList属性是用户需要使用的微信JSSDK接口列表,当开发者需要使用某个接口时,需要在列表中声明,否则无法调用该接口。如果调用的接口没有在jsApiList中声明,微信会报错提示未授权。 当以上配置都正确无误后,...

    asp版的微信JSSDK

    总结来说,ASP版的微信JSSDK实现涉及到的步骤包括获取access_token和jsapi_ticket,生成签名,配置JSSDK,以及调用相应的接口实现具体功能。虽然微信官方没有提供ASP版本的SDK,但通过以上步骤,开发者可以自行为ASP...

    springboot-wexin史上最全接入微信JSSDK菜鸟教程

    创建了WxInitController,提供了初始化微信JSSDK配置信息的接口。 处理获取分享URL的请求,并调用服务层方法来初始化微信JSSDK配置。 3.微信服务层: WxService负责业务逻辑处理,包括获取微信AccessToken、...

    微信jssdk在iframe页面失效问题的解决措施

    微信jssdk的使用依赖于微信客户端的签名验证,而微信客户端会检测调用页面的域名是否与配置的合法域名一致。在iframe中使用jssdk,可能不会通过这种合法域名的校验,因为它被视为一个嵌入页面,而非微信客户端直接...

    微信jssdk踩坑之签名错误invalid signature

    最近做公众号网页开发,使用微信 jssdk 页面签名时 IOS 中一直报错,这才刚开始就被这只拦路虎拦住了,报错如下: 然而 Android 和开发者工具中好得很,没有任何问题: 既然提示 签名非法 ,那就是签名有问题咯,...

    thinkPHP微信分享接口JSSDK用法实例

    jsapi_ticket是用于签名生成,确保微信JSSDK的安全性。同样,获取到的ticket也会存储到数据库中,且在过期前有效。 这两个函数的逻辑如下: - `getAccessToken()`:向`https://api.weixin.qq.com/cgi-bin/token`...

    weixin-jssdk-flask:简单的微信 jssdk 服务器端实现 with Flask

    3. **生成签名**:使用 jsapi_ticket、nonceStr(随机字符串)、当前时间戳以及需要在页面加载时调用的 JSSDK 接口列表,按照特定规则拼接成字符串并进行加密,生成 signature。 4. **配置 JSSDK**:将生成的 ...

    微信支付 jssdk 微支付

    2. **初始化JSSDK**:在网页中引入微信JSSDK的JS文件,并通过`wx.config()`方法配置必要的参数,如appID、timestamp、nonceStr、signature等,这些参数都需要通过服务器动态获取,以防止被篡改。 3. **支付接口调用...

    php微信分享jssdk

    4. **生成签名(Signature)**:微信JSSDK要求每个页面加载时,必须提供一个由当前URL、nonceStr(随机字符串)、timestamp(时间戳)、jsapi_ticket(JSAPI Ticket)生成的签名,用于安全验证。 5. **配置JSSDK**:...

    二维码和JS微信支付功能-已测试

    这个标识随后会传递给前端,前端通过微信JSSDK将标识转化为一个支付按钮,用户点击按钮后,微信支付H5页面弹出,用户确认支付信息并完成支付。 实现这两种支付功能,都需要在`lib/WxPayConfig`配置微信账户的相关...

    微信支付接口

    3. **JSAPI支付**:适用于网页端支付,开发者需要在前端页面上调用微信JSAPI,利用prepay_id生成支付签名,然后由微信JSSDK处理支付逻辑。用户点击支付按钮后,会弹出微信支付确认界面,完成支付。 4. **支付结果...

    微信js sdk invalid signature签名错误问题的解决方法分析

    开发者需要根据这些参数,按照微信官方指定的规则来生成签名。 关键步骤包括: 1. 确认签名算法正确。可以使用微信提供的校验工具进行测试,地址为:***。 2. 签名的生成规则包括以下要素: - jsapi_ticket:...

    微信js接口

    6. **微信JSSDK配置接口**:在使用任何JS接口之前,必须先通过`wx.config`进行配置,提供必要的AppID、Timestamp、NonceStr、Signature等参数,确保安全。 7. **微信消息推送接口**:通过`wx.showOptionSheet`或`wx...

    微信图片上传

    最后,需要提供签名sign,这是按照微信的签名生成算法计算得到的值。 在进行接口调用时,我们需要指定URL地址,即***。在某些情况下,调用该接口可能需要证书,因此,如果需要,应当准备好客户端证书。 关于请求...

    微信 js sdk 签名

    微信JS-SDK(JavaScript SDK)是微信开放平台提供的一套API接口,允许开发者在网页上集成微信的功能,如分享、支付、地理位置等。在使用这些功能时,必须进行签名验证,确保请求的安全性。本文将详细讲解微信JS-SDK...

    tp5微信小程序封装类库

    2. **预支付订单生成**:调用微信接口生成预支付订单,这个过程中会包含商品信息、金额、回调URL等数据。 3. **订单签名**:为了保证数据安全,需要对请求参数进行签名,防止数据被篡改。 4. **调用微信支付SDK**:...

    微信分享ticket生成源码实例

    - 在HTML页面中,引入微信JSSDK(`http://res.wx.qq.com/open/js/jweixin-1.6.0.js`或最新版本),初始化JSSDK并设置config参数,包括`appId`、`timestamp`、`nonceStr`、`signature`、`jsApiList`等。 - `...

    ASP微信支付接口源码免费下载(非常好用!!)

    这通常涉及到JavaScript与ASP后端的交互,以及微信JSSDK的使用。 7. **错误处理和日志记录**:在实现微信支付接口时,错误处理和日志记录是必不可少的部分,ASP代码应能够捕获异常,记录详细的错误信息,以便于调试...

    php版微信js-sdk支付接口类

    主要实现生成JS API 、Native的package签名包和Native响应的XML格式数据。注释都标上了各方法的用意。由于package包签名,略复杂,这个要自己多花时间去对应去看和log出文件来一一对比!当然只要你用上教程的类,...

Global site tag (gtag.js) - Google Analytics