// 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)); }
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 }, }); }
/// <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)); }