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
奶奶的,就先到这里了