Back

微信 - 使用微信 jssdk 的方式(签名)

发布时间: 2019-01-15 09:09:00

太坑了。 

百度根本就搜不到合适的链接,使用 微信jssdk, 微信文档等, 完全搜不到。

google 第一页就可以。  

地址在:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

1. 登录微信公众账号,配置: 1. ip白名单 , 2. 域名。 3. 下载 .txt 文件到nginx 指定目录

同时, 开始微信的相关配置,获得 appid, secret

2. 需要获得 access token . 

参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

例如:

    url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=#{appid}&secret=#{app_secret}"

    response = HTTParty.get url

    access_token = JSON.parse(response.body)['access_token']
    puts "== token: #{access_token}"

3. 获得 jsapi.   https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

    ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=#{access_token}&type=jsapi"
    response = HTTParty.get ticket_url
    ticket = JSON.parse(response.body)['ticket']

4. 获得signature

        def make_signature(h)
                text = h.keys.sort.map{|key| "#{key}=#{h[key]}"}.join("&")
                return Digest::SHA1.hexdigest(text)
        end

    my_hash = {
      jsapi_ticket: ticket,
      timestamp: Time.now.to_i,
      noncestr: noncestr,
      url: current_page_url

    }

    puts my_hash.inspect
    signature = make_signature my_hash
    puts "== signature: #{signature}"

在这里, url 是当前页面的url , 如果其中带有 问号 ? 的话,传入后端的时候, 需要做 encodeUriComponent操做(js 自带该函数)

var config_url = '/hb/p_share?url=' + encodeURIComponent(location.href.split('#')[0])

然后在后端 ,使用ruby 代码进行转换

require 'open-uri'

url = URI::decode(params[:url])

注意: 

签名失败,有时候是由于微信在打开页面的时候,会加上参数 (from=groupmessage) . 所以, url这个参数务必要通过程序获得,不要写死。 

这个问题差点搞死我。 

Back