zoukankan      html  css  js  c++  java
  • 经过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

    奶奶的,就先到这里了

  • 相关阅读:
    【原】WPF客户端只能启动一次
    【转载】U3D 游戏引擎之游戏架构脚本该如何来写
    【转载】u3d游戏客户端架构(---)
    【转载】asp.net 后台弹出提示框
    【转载】浅谈Excel开发:一 Excel 开发概述
    MyBatis 学习
    windows下关闭指定端口服务,解决tomcat端口占用问题
    中文用户名的js检验正则
    演讲稿
    面向对象和面向过程,python中的类class,python中程序的入口——main方法,
  • 原文地址:https://www.cnblogs.com/xinyunyou/p/12425462.html
Copyright © 2011-2022 走看看