<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>greatbody (孙瑞)</title>
    <link>https://ruby-china.org/greatbody</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>微信开发多客服遇到的问题</title>
      <description>&lt;p&gt;首先，在问这个问题前，已经各种 google，百度了，找到的都是 php。
然后，陈述问题：&lt;/p&gt;

&lt;p&gt;根据腾讯的解释，每次用户发送消息给公众号的时候，微信会向我们配置的一个路径 post 数据，以便我们进行定制化开发。&lt;/p&gt;

&lt;p&gt;为了让传给我们自己后台服务器的消息转发到“多客服”，我们需要回复：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;xml&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ToUserName&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;![CDATA[touser]]&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/ToUserName&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;FromUserName&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;![CDATA[fromuser]]&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/FromUserName&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;CreateTime&amp;gt;&lt;/span&gt;1399197672&lt;span class="nt"&gt;&amp;lt;/CreateTime&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;MsgType&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;![CDATA[transfer_customer_service]]&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/MsgType&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/xml&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我在一个 controller 里面处理了微信的消息推送&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;weixin_msg&lt;/span&gt;
    &lt;span class="c1"&gt;# 这里面就是消息处理代码，我在最后render了这的xml&lt;/span&gt;
   &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;html: &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;-&lt;/span&gt;&lt;span class="no"&gt;EOS&lt;/span&gt;&lt;span class="sh"&gt;
  &amp;lt;xml&amp;gt;
    &amp;lt;ToUserName&amp;gt;&amp;lt;![CDATA[touser]]&amp;gt;&amp;lt;/ToUserName&amp;gt;
    &amp;lt;FromUserName&amp;gt;&amp;lt;![CDATA[fromuser]]&amp;gt;&amp;lt;/FromUserName&amp;gt;
    &amp;lt;CreateTime&amp;gt;1399197672&amp;lt;/CreateTime&amp;gt;
    &amp;lt;MsgType&amp;gt;&amp;lt;![CDATA[transfer_customer_service]]&amp;gt;&amp;lt;/MsgType&amp;gt;
&amp;lt;/xml&amp;gt;
&lt;/span&gt;&lt;span class="no"&gt;   EOS&lt;/span&gt;
 &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;提交部署后，发现发送消息后，微信提示“该公众号暂时无法提供服务，请稍后再试”&lt;/p&gt;</description>
      <author>greatbody</author>
      <pubDate>Fri, 16 Oct 2015 19:57:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/27704</link>
      <guid>https://ruby-china.org/topics/27704</guid>
    </item>
    <item>
      <title>Rails 开发微信支付的一些总结</title>
      <description>&lt;p&gt;1、使用 gem 包
我使用的是 wx_pay 这个 gem，github：&lt;a href="https://github.com/jasl/wx_pay" rel="nofollow" target="_blank"&gt;https://github.com/jasl/wx_pay&lt;/a&gt;
【建议自己 fork 一下，然后在 gem 里面引用自己的 github 地址】
例如：
gem 'wx_pay', :github =&amp;gt; 'greatbody/wx_pay'
2、配置信息
参见&lt;a href="https://github.com/jasl/wx_pay" rel="nofollow" target="_blank"&gt;https://github.com/jasl/wx_pay&lt;/a&gt;
其中需要注意的是：
WxPay.appid = '微信给的公众号的 id'
WxPay.key = '自己设置的 api Key'，32 个字符，推荐自己去随机生成 32 个 16 进制数。【这个 key 不可以长了，长了会导致认证失败】
WxPay.mch_id = '微信支付商户号'
3、提交预订单&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# required fields&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="ss"&gt;body: &lt;/span&gt;&lt;span class="s1"&gt;'商品名'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;out_trade_no: &lt;/span&gt;&lt;span class="s1"&gt;'交易序列号，'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;total_fee: &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;spbill_create_ip: &lt;/span&gt;&lt;span class="s1"&gt;'127.0.0.1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;notify_url: &lt;/span&gt;&lt;span class="s1"&gt;'http://xxx.xxxx.xxx/static/receive_pay_notify/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;trade_type: &lt;/span&gt;&lt;span class="s1"&gt;'JSAPI'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# could be "JSAPI", "NATIVE" or "APP",&lt;/span&gt;
  &lt;span class="ss"&gt;openid: &lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:openid&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# required when trade_type is `JSAPI`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="vi"&gt;@result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;WxPay&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_unifiedorder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="vi"&gt;@sign_package&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vg"&gt;$weixin_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_jssign_package&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@result.nil&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;
  &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;html: &lt;/span&gt;&lt;span class="s2"&gt;"no"&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
  &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;html: &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="vi"&gt;@result.to_s&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'return_code'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s1"&gt;'FAIL'&lt;/span&gt;
  &lt;span class="vi"&gt;@pay_ticket_param&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="ss"&gt;timeStamp: &lt;/span&gt;&lt;span class="vi"&gt;@sign_package&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="ss"&gt;nonceStr: &lt;/span&gt;&lt;span class="vi"&gt;@sign_package&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"nonceStr"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="ss"&gt;package: &lt;/span&gt;&lt;span class="s2"&gt;"prepay_id=&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="vi"&gt;@result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'prepay_id'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;#这里一定注意，不仅仅是prepay_id，还需要拼接上“prepay_id=”&lt;/span&gt;
    &lt;span class="ss"&gt;signType: &lt;/span&gt;&lt;span class="s2"&gt;"MD5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;appId: &lt;/span&gt;&lt;span class="no"&gt;WxPay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;key: &lt;/span&gt;&lt;span class="no"&gt;WxPay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;key&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="vi"&gt;@pay_ticket_param&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="ss"&gt;paySign: &lt;/span&gt;&lt;span class="no"&gt;WxPay&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Sign&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@pay_ticket_param&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;#然后我们手动进行paySign计算&lt;/span&gt;
  &lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nf"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@pay_ticket_param&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4、页面上
js-sdk 的授权部分，参见 weixin_authorize 这个 gem 的说明，其实上面已经获取了授权信息，并且存在了&lt;a href="/sign_package" class="user-mention" title="@sign_package"&gt;&lt;i&gt;@&lt;/i&gt;sign_package&lt;/a&gt;中。&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;wx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;appId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;%= @sign_package["appId"] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;%= @sign_package["url"] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;%= @sign_package["timestamp"] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;nonceStr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;%= @sign_package["nonceStr"] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;%= @sign_package["signature"] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;jsApiList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chooseWXPay&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;wx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ready&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weixin_ready&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;wx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weixin_ready&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后，加一个支付函数&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weixin_ready&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;wx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chooseWXPay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;pay_ticket_param&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="nx"&gt;timeStamp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符&lt;/span&gt;
      &lt;span class="na"&gt;nonceStr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;%= @pay_ticket_param[:nonceStr] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 支付签名随机串，不长于 32 位&lt;/span&gt;
      &lt;span class="na"&gt;package&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;%= @pay_ticket_param[:package] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=***&lt;/span&gt;
      &lt;span class="na"&gt;signType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;%= @pay_ticket_param[:signType] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 签名方式，默认为"SHA1"，使用新版支付需传入"MD5"&lt;/span&gt;
      &lt;span class="na"&gt;paySign&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;%= @pay_ticket_param[:paySign] %&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 支付签名&lt;/span&gt;
      &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// 支付成功后的回调函数&lt;/span&gt;
        &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;支付成功&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wait for authentication!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;页面上调用这个支付函数就可以了。&lt;/p&gt;

&lt;p&gt;坑点：
1、第三步提交预订单中，out_trade_no 记得每次成功后要改变，最好的就是按照一个规则生成不重复的单号
2、关于授权目录的事情
首先，登陆进入：&lt;a href="https://mp.weixin.qq.com" rel="nofollow" target="_blank"&gt;https://mp.weixin.qq.com&lt;/a&gt;
然后，登陆后，点击左侧导航栏的，“微信支付”，然后再点开“开发配置”，在里面寻找“公众号支付-&amp;gt;支付授权目录”，设置支付授权目录时一定注意，这个路径就是 routes 里面处理支付页面的那个 get 的 path，例如：&lt;a href="http://xx.xxxx.xx/weixin/pay/" rel="nofollow" target="_blank"&gt;http://xx.xxxx.xx/weixin/pay/&lt;/a&gt;
对应我的 routes 是：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="ss"&gt;:weixin&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s1"&gt;'pay'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;:pay&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>greatbody</author>
      <pubDate>Fri, 09 Oct 2015 11:28:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/27592</link>
      <guid>https://ruby-china.org/topics/27592</guid>
    </item>
    <item>
      <title>关于 RailsAdmin 的扩展开发的疑问</title>
      <description>&lt;p&gt;公司的项目，用到了 RailsAdmin，但是需要做一些扩展。&lt;/p&gt;

&lt;p&gt;项目中用到了 acts-as-taggable-on 这个 gem&lt;/p&gt;

&lt;p&gt;在 RailsAdmin 中也需要用到这个 gem 包中的 css，但是不知道如何的引用。
同理，不知道如何引用别的 gem 包中的 js 和 css。&lt;/p&gt;

&lt;p&gt;【请注意：前提是我在给 railsadmin 做扩展，所以可能不能直接用 gem 包】&lt;/p&gt;

&lt;p&gt;【学习 rails 两个月，静默发布了一个 gem 包，水平一般。此问题已经过了百度、bing、google。暂时还没找到解决方法，所以来社区中求助】&lt;/p&gt;

&lt;p&gt;我做 railsadmin 的简单扩展是参考的这篇文章：&lt;a href="http://www.open-open.com/lib/view/open1416013849789.html" rel="nofollow" target="_blank"&gt;http://www.open-open.com/lib/view/open1416013849789.html&lt;/a&gt;（原作者不知道是谁，都是转的）&lt;/p&gt;</description>
      <author>greatbody</author>
      <pubDate>Tue, 21 Jul 2015 10:47:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/26584</link>
      <guid>https://ruby-china.org/topics/26584</guid>
    </item>
  </channel>
</rss>
