ruby微信開発紹介

2220 ワード

まず、微信の公衆アカウントは2種類あり、購読番号とサービス番号があり、それらの違いは以下の図の通りです.
上の図からサブスクリプション番号の機能が実は弱いことがわかりますが、認証がなければカスタムメニューもなく、ニマ認証は300元も出ていて、まだ包んでいません!!!
しかし、これは私たちが微信の公衆アカウントの開発を学ぶのに何の影響もありません.微信は私たちがデバッグするためにテストアカウントを提供しているからです.
まず開発者モデルに入ります.独立したサーバが必要です.そして構成
url:www.xxx.com/weixin
token: abcd

その後、微信サーバはGET要求を記入したURLに送信し、GET要求は4つのパラメータを携帯する.
signature          
timestamp       
nonce       
echostr

暗号化/検証プロセスは次のとおりです.
  • token、timestamp、nonceの3つのパラメータを辞書順に並べ替える
  • は3つのパラメータ文字列を1つの文字列に結合してsha 1暗号化
  • を行う.
  • 開発者が暗号化を取得した文字列はsignatureと比較することができ、この要求が微信コードに由来することを識別するのは以下の通りである:def check_weixin_legality array = [Rails.configuration.weixin_token, params[:timestamp], params[:nonce]].sort render :text => "Forbidden", :status => 403 if params[:signature] != Digest::SHA1.hexdigest(array.join) end

  • そして私たちはこのwww.xxxを通じて.com/weixinインタフェースは多くのことをすることができ、あなたが送信した文字メッセージによって異なるメッセージを返すことができます.例えば、あなたが送って、ニュースを送って、それから図文の情報を返して、音楽を送って、それから歌を返して、これは方法の中で判断すればいいです.
    def text_message
      content = params[:xml][:Content]
      case content
      when "  "
        render xml: music_reply_message
      when "  "
        render xml: news_reply_message
      end
    end
    

    次に、マイクロ信が提供するAPPIDおよびAPPSECRETインタフェース呼び出し要求の説明を必要とするメニューの実装をカスタマイズする.
    httpリクエスト方式:GET
    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
    

    ここのtokenには証明書の有効時間があるので、アクセスするたびにこのtokenを取得すると、それは本当に無駄で、微信はtokenの毎日の取得回数に限られています.これはcacheで解決します.
    def get_access_token
      if Rails.cache.read("access_token").nil?
        params = {grant_type: "client_credential", appid:Rails.configuration.weixin_appid, secret: Rails.configuration.weixin_secret}
        response = RestClient.get 'https://api.weixin.qq.com/cgi-bin/token', {params: params}
        errcode = (JSON.parse response)["errcode"]
        @access_token = (JSON.parse response)["access_token"]
        Rails.cache.write("access_token", @access_token, expires_in: 5.minutes)
      else
        @access_token = Rails.cache.read("access_token")
      end
    end
    

    未完...