微信开发获取签名wx.config

本文涉及的产品
.cn 域名,1个 12个月
简介: 微信开发获取签名wx.config

1 开发条件

1 申请一个微信公众号,并确认在开发–接口权限中拥有分享功能的权限。

2 公众号设置–功能设置:在JS接口安全域名中添加安全域名,这个安全域名不是url,只需添加一级域名即可。

3 开发,基本配置中,需要获得开发者id,开发者密码,ip白名单,ip白名单是服务器的ip。

4 获得jsapi_ticket:

先获取access_token:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

接口调用获取:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数 说明

grant_type 获取access_token填写client_credential

appid 第三方用户唯一凭证

secret 第三方用户唯一凭证密钥,即appsecret


获取jsapi_ticket https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

5 signature获取:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value

2 在后台使用动态url方式获取signature

前台:

 $(document).ready(function(){
    initPage();
    });
    function initPage() {
    //alert(window.location.href);/***用于获得当前连接url用**/
    /***用户点击分享到微信圈后加载接口接口*******/
    $.post("/business/businessAction.do?method=getSharData",{"url":location.href.split('#')[0]},function(data,status){
            data=eval("("+data+")");
            console.log(data);
            wx.config({
                      debug: false,
                      appId: 'wx071f25226923fc00',
                      timestamp:data.timestamp,
                      nonceStr:data.nonceStr,
                      signature:data.signature,
                      jsApiList: [
                          'checkJsApi',
                          'onMenuShareTimeline',
                          'onMenuShareAppMessage',
                          'hideOptionMenu',
                      ]
                  });
             wx.ready(function(){
                wx.hideOptionMenu();/***隐藏分享菜单****/ 
            }); 
        });
    };

后台:

import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;  
/**
*用来获得微信验证的所有参数
*/
public class Sign {
    public static void main(String[] args) {
        String jsapi_ticket = "bxLdikRXVbTPdHSM05e5u7pfX712TBiu6cLRUR0dNkywjZCMepIQeCTufMFPO6ARKcFQ1B_SkwMCD1MlAS-96Q";
        // 注意 URL 一定要动态获取,不能 hardcode
        String url = "http://vip.cioe.cn";
        Map<String, String> ret = sign(jsapi_ticket, url);
        for (Map.Entry entry : ret.entrySet()) {
            System.out.println(entry.getKey() + ", " + entry.getValue());
        }
    };
    public static Map<String, String> sign(String jsapi_ticket, String url) {
        Map<String, String> ret = new HashMap<String, String>();
        String nonce_str = create_nonce_str();
        String timestamp = create_timestamp();
        String string1;
        String signature = "";
        //注意这里参数名必须全部小写,且必须有序
        string1 = "jsapi_ticket=" + jsapi_ticket +
                  "&noncestr=" + nonce_str +
                  "&timestamp=" + timestamp +
                  "&url=" + url;
        System.out.println(string1);
        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(string1.getBytes("UTF-8"));
            signature = byteToHex(crypt.digest());
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
        ret.put("url", url);
        ret.put("jsapi_ticket", jsapi_ticket);
        ret.put("nonceStr", nonce_str);
        ret.put("timestamp", timestamp);
        ret.put("signature", signature);
        return ret;
    }
    private static String byteToHex(final byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash)
        {
            formatter.format("%02x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }
    private static String create_nonce_str() {
        return UUID.randomUUID().toString();
    }
    private static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }
}

3 改为接口进行访问

 @ApiOperation(value = "2.获取企业微信签名", notes = "2.获取企业微信签名")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "url", paramType = "query", value = "url" ,required = true)
    })
    @GetMapping("/getSign")
    public ResponseEntity<Map<String, String>> getSign(String url) throws ApiException {
        AccessTokenVO accessToken = WeComUtil.getAccessToken();
        String access_token = accessToken.getAccess_token();
        ResponseEntity<String> forEntity = restTemplate.getForEntity("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=" + access_token, String.class);
        String body = forEntity.getBody();
        com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(body);
        String ticket = jsonObject.getString("ticket");
        Map<String, String> sign = Sign.sign(ticket, url);
        return new ResponseEntity<>(sign,HttpStatus.OK);
    }
    @ApiOperation(value = "3.获取微信公众号签名", notes = "3.获取微信公众号签名")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "url", paramType = "query", value = "url" ,required = true)
    })
    @GetMapping("/getWechatMpSign")
    public ResponseEntity<Map<String, String>> getWechatMpSign(String url) throws ApiException {
        AccessTokenVO mpAccessToken = WeChatMpUtil.getMpAccessToken();
        String access_token = mpAccessToken.getAccess_token();
        ResponseEntity<String> forEntity = restTemplate.getForEntity("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_token+"&type=jsapi", String.class);
        String body = forEntity.getBody();
        com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(body);
        String ticket = jsonObject.getString("ticket");
        Map<String, String> sign = Sign.sign(ticket, url);
        return new ResponseEntity<>(sign,HttpStatus.OK);
    }


目录
相关文章
|
6月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
1110 1
|
6月前
|
前端开发 开发者
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
364 0
|
前端开发 小程序 API
uni-app 微信小程序中如何通过 canvas 画布实现电子签名?
uni-app 微信小程序中如何通过 canvas 画布实现电子签名?
uni-app 微信小程序中如何通过 canvas 画布实现电子签名?
|
3月前
|
小程序
手写签名-微信小程序
手写签名-微信小程序
61 1
|
6月前
|
前端开发 开发者
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
91 0
|
6月前
|
JSON JavaScript 前端开发
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
|
存储 算法 JavaScript
微信支付-Native下单API支付封装+签名流程解读
微信支付-Native下单API支付封装+签名流程解读
180 0
|
开发框架 小程序
用uniapp实现微信小程序的电子签名效果
用uniapp实现微信小程序的电子签名效果
735 0
用uniapp实现微信小程序的电子签名效果
|
小程序 JavaScript 前端开发
微信小程序:阿里云OSS直传实践-PHP实现服务端签名
微信小程序:阿里云OSS直传实践-PHP实现服务端签名
979 0
微信小程序:阿里云OSS直传实践-PHP实现服务端签名
|
自然语言处理 Python
基于微信好友用户的男女比例,区域排名,签名情感分析
基于微信好友用户的男女比例,区域排名,签名情感分析
213 0
基于微信好友用户的男女比例,区域排名,签名情感分析