class WmpSdk::Api

Public Class Methods

invoke_access_token() click to toggle source

获取小程序全局唯一后台接口调用凭据(access_token)。调用绝大多数后台接口时都需使用 access_token,开发者需要进行妥善保存。

# File lib/wmp_sdk/api.rb, line 21
def self.invoke_access_token
  response = Faraday.get('https://api.weixin.qq.com/cgi-bin/token', {
      grant_type: :client_credential,
      appid:      WmpSdk.configuration.app_id,
      secret:     WmpSdk.configuration.secret,
  })
  raise WmpServerError, "Response Status: #{response.status}" unless response.success?
  JSON.parse(response.body, symbolize_names: true)
end
invoke_auth_session(code) click to toggle source

登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。

# File lib/wmp_sdk/api.rb, line 9
def self.invoke_auth_session(code)
  response = Faraday.get('https://api.weixin.qq.com/sns/jscode2session', {
      appid:      WmpSdk.configuration.app_id,
      secret:     WmpSdk.configuration.secret,
      js_code:    code,
      grant_type: :authorization_code,
  })
  raise WmpServerError, "Response Status: #{response.status}" unless response.success?
  JSON.parse(response.body, symbolize_names: true)
end
invoke_subscribe_message_send(access_token, openid, template_id, page, data, miniprogram_state = 'formal', lang = 'zh_CN') click to toggle source

发送订阅消息

# File lib/wmp_sdk/api.rb, line 46
def self.invoke_subscribe_message_send(access_token, openid, template_id, page, data, miniprogram_state = 'formal', lang = 'zh_CN')
  response = Faraday.post('https://api.weixin.qq.com/cgi-bin/message/subscribe/send', { access_token: access_token }) do |request|
    request.body = {
        touser:            openid,
        template_id:       template_id,
        page:              page,
        data:              data,
        miniprogram_state: miniprogram_state,
        lang:              lang,
    }.to_json
  end
  raise WmpServerError, "Response Status: #{response.status}" unless response.success?
  JSON.parse(response.body, symbolize_names: true)
end
invoke_uniform_message(access_token, openid, mp_template_msg, weapp_template_msg = nil) click to toggle source

下发小程序和公众号统一的服务消息

# File lib/wmp_sdk/api.rb, line 32
def self.invoke_uniform_message(access_token, openid, mp_template_msg, weapp_template_msg = nil)
  response = Faraday.post('https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send', { access_token: access_token }) do |request|
    request_body = {
        touser:          openid,
        mp_template_msg: mp_template_msg,
    }
    request_body.merge!(weapp_template_msg: weapp_template_msg) if weapp_template_msg
    request.body = request_body.to_json
  end
  raise WmpServerError, "Response Status: #{response.status}" unless response.success?
  JSON.parse(response.body, symbolize_names: true)
end
invoke_upload_temp_media(access_token, file_name) click to toggle source

把媒体文件上传到微信服务器。目前仅支持图片。用于发送客服消息或被动回复用户消息。

# File lib/wmp_sdk/api.rb, line 62
def self.invoke_upload_temp_media(access_token, file_name)
  connection = Faraday.new('https://api.weixin.qq.com') do |conn|
    conn.request :multipart
    conn.request :url_encoded
    conn.adapter :net_http
  end
  file       = Faraday::FilePart.new Rails.root.join(file_name).to_s, 'image/jpg'
  response   = connection.post("/cgi-bin/media/upload?access_token=#{access_token}&type=image", { media: file })
  raise WmpServerError, "Response Status: #{response.status}" unless response.success?
  JSON.parse(response.body, symbolize_names: true)
end
send_customer_service_message(access_token, openid, message_type, options = {}) click to toggle source

发送客服消息给用户

# File lib/wmp_sdk/api.rb, line 75
def self.send_customer_service_message(access_token, openid, message_type, options = {})
  response = Faraday.post('https://api.weixin.qq.com/cgi-bin/message/custom/send', { access_token: access_token }) do |request|
    request.body = {
        touser:  openid,
        msgtype: message_type,
    }.merge!(options).to_json
  end
  raise WmpServerError, "Response Status: #{response.status}" unless response.success?
  JSON.parse(response.body, symbolize_names: true)
end
validate_customer_service_message(signature, timestamp, nonce) click to toggle source

消息推送验证

# File lib/wmp_sdk/api.rb, line 87
def self.validate_customer_service_message(signature, timestamp, nonce)
  Digest::SHA1.hexdigest(
      [WmpSdk.configuration.token, timestamp, nonce].sort.join
  ) == signature
end