Exemple #1
0
        // Json 格式化处理
        private static async Task <T> JsonFormat <T>(WechatPayConfig config, HttpResponseMessage resp, bool needCheckSign)
            where T : WechatBaseResp, new()
        {
            if (!resp.IsSuccessStatusCode)
            {
                var content = await resp.Content.ReadAsStringAsync();

                return(string.IsNullOrEmpty(content)
                    ? new T().WithResp(SysRespCodes.NetError, $"微信支付接口请求异常({resp.ReasonPhrase})")
                    : JsonSerializer.Deserialize <T>(content));
            }

            var respDetail = await GetResponseDetail(resp);

            if (needCheckSign)
            {
                var verifyRes = await WechatCertificateHelper.Verify(config, respDetail.signature, respDetail.serial_no,
                                                                     respDetail.nonce, respDetail.timestamp, respDetail.body);

                if (!verifyRes.IsSuccess())
                {
                    verifyRes.request_id = respDetail.request_id;
                    return(verifyRes.ToResp <T>());
                }
            }

            return(string.IsNullOrEmpty(respDetail.body)
                ? new T()
                : JsonSerializer.Deserialize <T>(respDetail.body));
        }
Exemple #2
0
        private static async Task <SendEncryptBodyResp> GetReqContent_JsonEncryptSegment(WechatPayConfig payConfig,
                                                                                         Dictionary <string, string> dics)
        {
            var certRes = await WechatCertificateHelper.GetLatestCertsByConfig(payConfig);

            if (!certRes.IsSuccess())
            {
                return(certRes.ToResp <SendEncryptBodyResp>());
            }

            var cert = certRes.item;

            return(new SendEncryptBodyResp()
            {
                body = dics.ToDictionary(
                    d => d.Key,
                    d => WechatCertificateHelper.OAEPEncrypt(cert.cert_public_key, d.Value)
                    )
            });
        }
        /// <summary>
        ///   获取js唤起支付的参数信息
        /// </summary>
        /// <param name="payConfig"></param>
        /// <returns></returns>
        public Dictionary <string, string> GetJsPreParas(WechatPayConfig payConfig)
        {
            var timeStamp = DateTime.Now.ToUtcSeconds().ToString();
            var appId     = payConfig.app_id;
            var nonceStr  = NumHelper.RandomNum(8);
            var package   = $"prepay_id={prepay_id}";

            var waitSignData = $"{appId}\n{timeStamp}\n{nonceStr}\n{package}\n";
            var privateCert  = WechatCertificateHelper.GetMchPrivateCertificate(payConfig);
            var signature    = WechatCertificateHelper.Sign(privateCert.private_key, waitSignData);

            return(new Dictionary <string, string>()
            {
                //{"appId", appId},
                { "timeStamp", timeStamp },
                { "nonceStr", nonceStr },
                { "package", package },

                { "signType", "RSA" },
                { "paySign", signature },
            });
        }
Exemple #4
0
 /// <summary>
 /// 根据微信商户配置,验证结果签名
 /// </summary>
 /// <param name="payConfig">支付配置</param>
 /// <param name="signature">微信返回头信息中的签名</param>
 /// <param name="serialNo">微信返回头信息中的平台证书编号</param>
 /// <param name="nonce">微信返回头信息中的随机串</param>
 /// <param name="timestamp">微信返回头信息中的时间戳</param>
 /// <param name="respBody">微信返回的内容字符串</param>
 /// <returns></returns>
 public static Task <WechatBaseResp> Verify(WechatPayConfig payConfig, string signature,
                                            string serialNo, string nonce, long timestamp, string respBody)
 {
     return(WechatCertificateHelper.Verify(payConfig, signature, serialNo, nonce, timestamp, respBody));
 }