本人于2016年7月12号从微信官网下载了 WxPayAPI_CS_v3 , C#版本的Demo程序,现在来分享下腾讯是多么的坑爹.
第1个坑: JSAPI Demo. JsApiPayPage.aspx 页面中 如下代码
//调用微信JS api 支付
function jsApiCall()
{ WeixinJSBridge.invoke( 'getBrandWCPayRequest', <%=wxJsApiParam%>,//josn串 function (res) { WeixinJSBridge.log(res.err_msg); alert(res.err_code + res.err_desc + res.err_msg); } ); }
<form runat="server">
<br/> <div align="center"> <br/><br/><br/> <asp:Button ID="submit" runat="server" Text="立即支付" OnClientClick="callpay()" style="width:210px; height:50px; border-radius: 15px;background-color:#00CD00; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" /> </div> </form>请注意Button采用的是服务端控件,当触发点击的时候会引起页面回传导致 <%=wxJsApiParam%>,//josn串 为空,解决办法很简单,使用html button即可
<button οnclick="callpay()" type="button">立即支付</button>
还有要注意的是: 微信web开发者工具V0.7.0 中不支持JSAPI调试, 所以大家还是用手机在微信端调试吧.
第2个坑 扫码支付模式一:
公众平台设置好 :支付授权目录 和 扫码支付回调URL.
大家看代码: lib\Data.cs 中 第112行 FromXml函数中
112: public SortedDictionary<string, object> FromXml(string xml)
if(m_values["return_code"] != "SUCCESS")
{ return m_values; }SortedDictionary<string, object> m_values ; 这是 m_values的声明
m_values["return_code"] 取出来的数据是Object,如此不严谨的代码导致了异常.解决办法:
首先判断 key是否存在,然后在做类型转换.
最后完美解决了支付问题。 最后吐槽下 腾讯的程序员们,做个Demo出来能先测试下不?以后我个人是不会再使用微信支付了,程序员都如此,真不敢相信微信支付的安全.