微信 - 使用微信 jssdk 的方式(签名)
访问量: 1677
太坑了。
百度根本就搜不到合适的链接,使用 微信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这个参数务必要通过程序获得,不要写死。
这个问题差点搞死我。