c# 微信商户转零钱 金额大于2000 遇到的问题

金额大于2000,提示缺少 Headers 中的 Wechatpay-Serial

这个,我们需要访问一下微信的接口,来获取到这个序列号 直接上代码

cs 复制代码
 public static string GetWechatpay_Serial()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.mch.weixin.qq.com/v3/certificates");
            request.Method = "GET";
            request.ContentType = "application/json;charset=UTF-8";
            request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36";
            request.Accept = "application/json";
            string Authorization = GetAuthorization("https://api.mch.weixin.qq.com/v3/certificates", "GET", "", mchid, serialNo);
            request.Headers.Add("Authorization", Authorization);
            //request.Headers.Add("User-Agent", "https://zh.wikipedia.org/wiki/User_agent");
            //request.Headers.Add("Accept", "application/json");

            string reslut = "";
            HttpWebResponse wbResponse = (HttpWebResponse)request.GetResponse();
            using (Stream responseStream = wbResponse.GetResponseStream())
            {
                using (StreamReader sReader = new StreamReader(responseStream))
                {
                    reslut = sReader.ReadToEnd();
                }
            }
            return reslut;

        }

这里面的 商户id 和商户的序列号,自己替换哈

获取内容后,返回的内容中,会有一个序列号,

接上篇文章中的 https://blog.csdn.net/Little_Code/article/details/130243211 WxV3PostJson,添加这个代码

cs 复制代码
 request.Headers.Add("Wechatpay-Serial", "刚刚的序列号");

这个时候,会提示,需要某些信息加密

然后就用到了这个代码

cs 复制代码
private string ALGORITHM = "AES/GCM/NoPadding";
        private  int TAG_LENGTH_BIT = 128;
        private  int NONCE_LENGTH_BYTE = 12;
        //APIV3  密钥   
        private  string AES_KEY = "APIV3密钥";//我这边用的V3,如果你是V2可能就是V2的密钥

        public  string AesGcmDecrypt(string associatedData, string nonce, string ciphertext)
        {
            GcmBlockCipher gcmBlockCipher = new GcmBlockCipher(new AesEngine());
            AeadParameters aeadParameters = new AeadParameters(
                new KeyParameter(Encoding.UTF8.GetBytes(AES_KEY)),
                128,
                Encoding.UTF8.GetBytes(nonce),
                Encoding.UTF8.GetBytes(associatedData));
            gcmBlockCipher.Init(false, aeadParameters);
            byte[] data = Convert.FromBase64String(ciphertext);
            byte[] plaintext = new byte[gcmBlockCipher.GetOutputSize(data.Length)];
            int length = gcmBlockCipher.ProcessBytes(data, 0, data.Length, plaintext, 0);
            gcmBlockCipher.DoFinal(plaintext, length);
            return Encoding.UTF8.GetString(plaintext);
        }

这个方法中的 参数,就是GetWechatpay_Serial(),这个方法返回的数据,然后放进去进行解密,解密得到的就是这样一串 ------BEGIN CEFT...这样一串公钥,拿着这个公钥,对用户的名称等信息进行加密

cs 复制代码
public static string RSAEncrypt(string text, byte[] publicKey)
        {
            using (var x509 = new X509Certificate2(publicKey))
            {
                using (var rsa = (RSACryptoServiceProvider)x509.PublicKey.Key)
                {
                    var buff = rsa.Encrypt(Encoding.UTF8.GetBytes(text), true);

                    return Convert.ToBase64String(buff);
                }
            }
        }

最后 使用这个方法:

cs 复制代码
 string jiami = RSAEncrypt(user_name, System.Text.Encoding.UTF8.GetBytes(publicKey.Replace("-----BEGIN CERTIFICATE-----", "").Replace("-----END CERTIFICATE-----", "").Replace("\n", "")));
            //publickKey.Replace("-----BEGIN CERTIFICATE-----", "") .Replace("-----END CERTIFICATE-----", "").Replace("\n", "")
            dic1.Add("user_name", jiami);

这样,就成功发出申请了

相关推荐
deepfu38 分钟前
微信 API 消息模块:发送视频消息的流程与优化点
微信·机器人
tang_04271 小时前
【Hi.Ltd 专题】第7期:Threading 采集线程、锁与 LRU 缓存
经验分享·c#·hi.ltd系列
A_nanda1 小时前
C# 界面卡顿:从定位到根治
c#
2501_930707782 小时前
使用C#代码为新创建的 Word 文档创建目录
c#·word
iPad协议个微协议2 小时前
用 WechatApi 搭建微信自动化系统,需要哪些工程能力
微信·自动化·微信开发·wechatapi·个人微信号二次开发·微信ai客服·微信智能体ai
czhc11400756633 小时前
同一个数,两把尺子:六组“看着一样、其实不一样“
c#
微信ipad协议开发3 小时前
微信机器人 SaaS 还是私有化部署?两种模式对比选型
微信·机器人
花北城4 小时前
【C#底层库】access_token授权鉴权验证
c#·鉴权·token·授权
rick9775 小时前
C# 动态代理与 DispatchProxy:从原理到实战的完整指南
c#
tang_04275 小时前
【Hi.Ltd 专题】第8期:Managements 插件、单例与服务定位
经验分享·c#·hi.ltd系列