微信6.2开发笔记

一般的开发信息就不多说了,具体可以从官方文档了解。下面就记下我开发过程中遇到的一些奇葩坎和需要注意的地方。

对微信请求消息的处理

微信与我提供的微信处理接收页面(官方称为服务器地址,目前仅支付80端口)的交互,分为两种请求方式post和get。

微信服务器配置启用的时候,也就是设置对微信请求的处理的页面的时候,这时候是一次get请求,返回随机字符串则表示验证通过,即启用成功。
用户使用微信发送的消息事件什么的都是用post方式的请求,与此同时也会用get的请求推送参数到处理页面用来验证是否为微信发送过来的请求。

那么,对于微信请求的消息返回我们想返回的消息给用户,就完成了与微信的交互。

 

对微信的调试

用日志查看,上传一次程序,再看一眼日志……如此循环,心情糟糕透了。
用花生壳调试,不用上传,实时调试,效率提升了不少。资料:http://www.cnblogs.com/zskbll/p/4074855.html

另外,因为微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。所以当调试的时候,因为断点的停留,导致多个请求同时进来不好调试 ,所以用个变量把它限定在第一个请求。

private static int requestNum = 0;//测试的时候方便调试只用第一次请求的参数(微信无相应会重复请求3次的响应)
public void ProcessRequest(HttpContext context)
{
      requestNum++;
      if (requestNum == 1)
      {
          Auth();
      }
}

 

微信支付(v3)

两种支付请求:

1.使用JS API发起支付请求
2.使用Native API发起支付请求


从官方下载了支付的C#demo,打开NativePayPage.aspx页面,即扫码支付(Native API)模式二,在发起“统一下单接口”请求的时候,在HttpService.Post处报错“连接不到远程服务器”,或者“请求超时”。

另外,在模式一扫码的时候,微信提示“获取商户订单信息超时或商户返回httpcode非200”


解决方法:在HttpService类里的Post和Get请求里注释以下代码(我不知道这个代理设置有什么用,反正注释掉就可以了,知道原因的麻烦告诉我)

//(代理暂不知道有何用,暂注释掉,否则请求报错)
//设置代理
//WebProxy proxy = new WebProxy();
//proxy.Address = new Uri(WxPayConfig.PROXY_URL);
//request.Proxy = proxy;

 

扫码模式(Native API):

模式一:线下二维码支付(我想应该是这样)


流程:

1.商户将商户订单ID生成二维码

2.用户扫码

3.微信处理扫码结果,请求商户设置Native原生支付的支付回调URL(在官方demo里的页面为NativeNotifyPage.aspx)

4.在NativeNotifyPage.aspx里调用微信的“统一下单接口”

5.弹出输入密码的支付界面,用户确认支付

6.微信请求支付结果通知回调url(在官方demo的WxPayConfig类里的NOTIFY_URL)

7.在NOTIFY_URL里做业务处理

 

模式二:线上扫码支付(比如官网接入扫码支付)


流程:

1.调用微信的“统一下单接口”生成二维码

2.用户扫码

3.弹出输入密码的支付界面,用户确认支付

4.微信请求支付结果通知回调url(在官方demo的WxPayConfig类里的NOTIFY_URL)

5.在NOTIFY_URL里做业务处理

 

模板消息

扫码支付成功之后,对于未关注公众号的用户发送不了模板消息。在未关注公众号的情况下即使支付成功,并在支付成功界面勾选(默认勾选)关注公众号也不会发送消息。

发送“模板消息”后微信服务器会发送“模板消息”是否发送成功的消息给接收消息页面。但我不知道接收到消息之后要如何处理,如果发送失败是要写入异常日志呢,还是做其他用处。

 

JS支付

1.报“redirect_uri参数错误”
原因:“网页授权获取用户基本信息”接口的授权回调页面域名未设置。

2.用官方提供的JS支付页面,支付成功后没有执行回调函数。
解决:官方提供页面里的submit按钮使用的是asp.net的服务器控件,另外改成<button></button>也不用,原因不详。改成<input type="button" />和<a>标签都可以使用,即执行回调函数。

3.报“不允许跨号支付”
解决:取消关注公众号,再重新关注后进行支付。

 

H5页面

微信里的图片和微信内置浏览器均有缓存,导致更改了图片或样式后预览没有及时发生改变。

解决缓存的方法:

1.在文件后面加上参数,比如:/css/index.css?v=1221 
2.另外博客园的网友说这样也可以,我觉得应该可以,没有印证。

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

 

自定义菜单

自定义菜单里的key相当于一个标识,点击时会发送请求到商户设置的消息处理页面,我们则根据key做相关处理。 

 

posted @ 2015-06-29 09:33  阿猫小覃  阅读(555)  评论(0编辑  收藏  举报