给定关键字不在字典中?

zhu8323124 2013-05-31 05:15:45
用C#网页 做手机支付宝功能,用RSA签名
结果 支付宝接口 接入的时候出错

SortedDictionary<string, string> sd = new SortedDictionary<string, string>();
int count = 0;
string sparam = "";
string key = "";
string value = "";
for (int i = 0; i < result.Length; i++)
{
sparam = result[i];
count = sparam.IndexOf('=');
key = sparam.Substring(0, count);
value = sparam.Substring(count + 1, sparam.Length - (count + 1));
sd.Add(key, value);
}
// 出错 给定关键字不在字典中?
string sign = sd["sign"];

//配置待签名数据
Dictionary<string, string> dicData = MobileFunction.FilterPara(sd);
string req_Data = MobileFunction.CreateLinkString(dicData);

有人知道为什么
...全文
592 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hua_lanyu 2013-06-20
  • 打赏
  • 举报
回复
引用 9 楼 zhu8323124 的回复:
可能是哪里配置不对, 我以为这个方法 就是写入内存 然后再读出来
这个问题解决了吗
zhu8323124 2013-05-31
  • 打赏
  • 举报
回复
可能是哪里配置不对, 我以为这个方法 就是写入内存 然后再读出来
zhu8323124 2013-05-31
  • 打赏
  • 举报
回复
哦, 有道理...
  • 打赏
  • 举报
回复
请求数据参数和网址返回数据是两回事. 也许请求返回结果中并不包含那个属性
coobai 2013-05-31
  • 打赏
  • 举报
回复
没做过 支付宝接口对接 帮顶
zhu8323124 2013-05-31
  • 打赏
  • 举报
回复
关键是这个方法

/// <summary>
    /// 构造HTTP的POST请求
    /// </summary>
    /// <param name="sParaTemp">请求参数数组</param>
    /// <param name="gateway">网关地址</param>
    /// <param name="sellprivatekey">商户私钥</param>
    /// <param name="input_charset">编码格式</param>
    /// <returns>支付宝返回结果</returns>
    public static string SendPostInfo(SortedDictionary<string, string> sParaTemp, string gateway, string key, string input_charset, string signType)
    {
        string strRequestData = "";

        

        strRequestData = BuildRequestParaToString(sParaTemp, key, input_charset);
       //format=xml&partner=2088901722289620&req_data=<direct_trade_create_req><subject></subject><out_trade_no>1305311728069918</out_trade_no><total_fee>0.01</total_fee><seller_account_name>zhifubao@topbs.co</seller_account_name><notify_url>MNotifyUrl.aspx</notify_url><out_user></out_user><merchant_url>MMerchantUrl.aspx</merchant_url><call_back_url>MReturnUrl.aspx</call_back_url></direct_trade_create_req>&req_id=2013/5/31 16:43:03&sec_id=0001&service=alipay.wap.trade.create.direct&v=2.0&sign=UTtYagNY6B4vnub0D3%2bjIo7xC5bEIcVrMaZf2wF5fdowoeRQXsgg6W6Njnajh74VA8u4IF6vcTC%2fIg%2b6aKk4EKwcN14ia8w08wr62tPpIdm%2bbkcCDfX%2bg%2fFjYpDOMkGysWy3WyHI7gt4DhHwAqrnxBnTddjS3%2b3xzq148xfGfEQ%3d
       //strRequestData  里面是有 sign的  我调试过了 这里有sign属性
        if (signType == "&sign_type=0001")
        {
            strRequestData += signType;
        }

        Encoding code = Encoding.GetEncoding(input_charset);

        byte[] bytesRequestData = code.GetBytes(strRequestData);

        string strUrl = gateway;

        HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(strUrl);
        myReq.Method = "post";
        myReq.ContentType = "application/x-www-form-urlencoded";

        myReq.ContentLength = bytesRequestData.Length;

        using (Stream reqStream = myReq.GetRequestStream())
        {
            reqStream.Write(bytesRequestData, 0, bytesRequestData.Length);
        }
        using (WebResponse wr = myReq.GetResponse())
        {
            Stream myStream = wr.GetResponseStream();
            StreamReader sr = new StreamReader(myStream, code);
            string strResult = sr.ReadToEnd();
            // 到这里  没有sign属性了  突然消失了  不知道为什么
            // 不知道为什么少了一个 sign 属性
            return strResult;
        }
    }
coobai 2013-05-31
  • 打赏
  • 举报
回复
你可以先判断一下是否包含 sign 的 key

if(sd.ContainsKey("sign"))
{
    string sign = sd["sign"]; 
}
md5e 2013-05-31
  • 打赏
  • 举报
回复
count = sparam.IndexOf('=');==>count = sparam.IndexOf('=') - 1; 或者 key = sparam.Substring(0, count); ==>key = sparam.Substring(0, count-1);
coobai 2013-05-31
  • 打赏
  • 举报
回复
那就是 sd 字典中没有 key为sign 的咯
zhu8323124 2013-05-31
  • 打赏
  • 举报
回复
支付宝接口代码基本没改

62,055

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧