示例#1
0
        /// <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));
        }
示例#2
0
        /// <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));
        }
示例#3
0
 /// <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));
 }
示例#4
0
 /// <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));
 }
示例#5
0
        /// <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));
        }