/// <summary> /// 对响应验签 /// 调用方向:掌上生活 --> 商户 /// </summary> /// <param name="response">响应报文</param> /// <param name="verifyKey">验签所使用的Key,为掌上生活公钥</param> /// <param name="verifyAlgorithm">验签算法(SHA1WithRSA 或 SHA256WithRSA)</param> /// <returns>true为验签成功,false为验签失败</returns> public static bool VerifyForResponse(String response, String verifyKey, String verifyAlgorithm) { Dictionary <string, object> verifySignParams = JsonUtils.JsonStrToDic(response); string sign = verifySignParams["sign"].ToString(); if (string.IsNullOrEmpty(sign)) { throw new ArgumentException("返回报文参数中sign字段为空!"); } verifySignParams.Remove("sign"); Console.WriteLine(URLUtils.AssembleUrl("", verifySignParams, false)); return(Verify(URLUtils.AssembleUrl("", verifySignParams, false), sign, verifyKey, verifyAlgorithm)); }
/// <summary> /// 生成掌上生活协议,带有签名 /// </summary> /// <param name="funcName">功能名</param> /// <param name="paramsMap">参数</param> /// <param name="xmlPrivateKey">签名所使用的Key,为商户私钥</param> /// <param name="signAlgorithm">签名算法(SHA1WithRSA 或 SHA256WithRSA)</param> /// <returns>掌上生活协议</returns> public static string GenProtocol(string funcName, Dictionary <string, object> paramsDic, string xmlPrivateKey, string signAlgorithm) { if (string.IsNullOrEmpty(xmlPrivateKey)) { throw new ArgumentException("signKey不能为空"); } if (string.IsNullOrEmpty(funcName)) { throw new ArgumentException("funcName不能为空"); } if (string.IsNullOrEmpty(signAlgorithm)) { throw new ArgumentException("signAlgorithm不能为空"); } // 拼接需要签名的串 string signProtocol = URLUtils.AssembleProtocol(funcName, paramsDic, false); // 签名 string sign = Sign(signProtocol, xmlPrivateKey, signAlgorithm); paramsDic.Add("sign", sign); // 拼接完整的串 return(URLUtils.AssembleProtocol(funcName, paramsDic, true)); }
/// <summary> /// 生成请求报文体 /// </summary> /// <param name="dicParams">参数</param> /// <returns>请求报文体,如: key1=value1&key2=value2...</returns> public static string GenRequestBody(Dictionary <string, object> dicParams) { return(URLUtils.AssembleUrl(null, dicParams, true)); }
/// <summary> /// dictionary转为querystring /// </summary> /// <param name="dic">参数dictionary</param> /// <param name="isSort">是否排序</param> /// <param name="isUrlEncode">是否需要URLEncode</param> /// <returns>querystring</returns> public static string DicToQueryString(Dictionary <string, object> dic, bool isSort, bool isUrlEncode) { return(URLUtils.DicToQueryString(dic, isSort, isUrlEncode)); }
/// <summary> /// 对请求签名 /// 调用方向:商户 --> 掌上生活 /// </summary> /// <param name="prefix">前缀,如interface.json</param> /// <param name="paramsDic">待签名数据</param> /// <param name="xmlPrivateKey">签名使用的key,为商户私钥</param> /// <param name="signAlgorithm">签名算法(SHA1WithRSA 或 SHA256WithRSA)</param> /// <returns>签名</returns> public static string SignForRequest(string prefix, Dictionary <string, object> paramsDic, string xmlPrivateKey, string signAlgorithm) { string url = URLUtils.AssembleUrl(prefix, paramsDic, false); return(Sign(url, xmlPrivateKey, signAlgorithm)); }