经过4天时间终于搞定微信支付

2016年就发现,未来,客户自己下单才是王道

2018年,研究过微信支付,发现很麻烦,可能是想赚快钱吧,就没有细细研究

2020年,疫情期间,终于下定决心实现在线支付

发现微信支付官方有dome文件,简直太fuck了

至少有4处错误,一个官方文档,居然漏洞百出,你们全部做游戏去了吗?

1.中文编码的问题,你大爷的,具体乱码,修改如下

private string CalcHMACSHA256Hash(string plaintext, string salt)
{
string result = "";
//var enc = Encoding.Default;
var enc = Encoding.UTF8;
//......
}

2.string return_sign = GetValue("sign").ToString().ToLower();这个地方如果不变成小写,不可以,官方给给说法吧

public bool CheckSign(string signType)
{
//此处代码省略,没有改动

//获取接收到的签名
string return_sign = GetValue("sign").ToString().ToLower();

//在本地计算新的签名
string cal_sign = MakeSign(signType);

if (cal_sign == return_sign)
{
return true;
}

Log.Error(this.GetType().ToString(), "WxPayData签名验证错误!");
throw new WxPayException("WxPayData签名验证错误!");
}

3.if(m_values["return_code"].ToString().ToUpper() != "SUCCESS")如果不这样改,你能成功吗?

public SortedDictionary<string, object> FromXml(string xml)
{
//此处代码省略,没改动
if(m_values["return_code"].ToString().ToUpper() != "SUCCESS")
{

//其他代码没有改动
}

return m_values;
}

以上3个问题出现在data.cs文件,第4个出现在NativeNotify.cs文件

4.product_id问题,绝对没有返回这个值,,

public override void ProcessNotify()
{
WxPayData notifyData = GetNotifyData();

//检查openid和product_id是否返回
if (!notifyData.IsSet("openid") || !notifyData.IsSet("attach"))

 

希望看到的人不要再走弯路,当然官方的文件,还是帮助很多,你得有面向对象编程的基础才行

以上代码为asp.net

5.打开项目的时候要把.net改成4.0

奶奶的,就先到这里了

posted @ 2020-03-06 11:10  新云优  阅读(323)  评论(0编辑  收藏  举报