急求微信支付的前辈们帮助!我这个问题,到底哪个环节出了问题?

ruan1978 2018-10-19 11:30:03
我用的是vs2012,c#。有个app调用微信支付,需要我在服务器端集成。已经大概用了2周时间,中间问过人,也看过很多帖子,还是有问题。主要是:签名错误!
1.基础工作
微信支付商户平台正常,有商户号,即mch_id,这里还要获取一个apikey,也是正常设置。
微信开放平台,申请了app应用,也都开通了微信支付功能。appid

2.代码部分
参考了网上的一份代码,主要几部分组成
(1)微信支付配置
mch_id,appid,apikey,appsecret,支付的网址:"https://api.mch.weixin.qq.com/pay/unifiedorder"
还有这个串: "Sign=WXPay";
(2)我找了很多原因,将我的信息写入,生成签名,sign,与“https://pay.weixin.qq.com/wiki/tools/signverify/”这里平台产生的签名是一致的。
(3)看代码:
[HttpPost]
public string Alipay_ulr([FromBody]Models.RetModel model)

{
PayConfig pay = new PayConfig();
string MchId = pay.MchId;
string AppId = pay.AppId;
string ApiKey = pay.AppKey;
string NotifyUrl = pay.NotifyUrl;
var payment = new pay(MchId,
AppId,
ApiKey,
NotifyUrl);
string Amount = model.Amount;
Int64 wx_total_fee = Int64.Parse(model.wxtotalfee);
var orderId = model.orderid;
var jsonStr = payment.Pay(wx_total_fee, orderId, "" + Amount + "", "ip地址");//填写本机的ip地址
return jsonStr;
}
调用的入口。

public string Pay(Int64 TotalFee, string TradeNo, string Des, string ClientIp, string FeeType = "CNY")
{
//为发送请求给微信服务器准备数据
var nstr = MakeNonceStr();
Hashtable packageParameter = new Hashtable();
packageParameter.Add("appid", this.AppId);
packageParameter.Add("body", Des);
packageParameter.Add("mch_id", this.MchId);
packageParameter.Add("notify_url", this.NotifyUrl);
packageParameter.Add("nonce_str", nstr);
packageParameter.Add("out_trade_no", TradeNo);
packageParameter.Add("total_fee", TotalFee.ToString());
packageParameter.Add("spbill_create_ip", ClientIp);
packageParameter.Add("trade_type", "APP");
packageParameter.Add("fee_type", FeeType);
var sign = CreateMd5Sign(packageParameter);
packageParameter.Add("sign", sign); //sign产生的值与微信平台产生的签名一致
var xe = PostDataToWeiXin(packageParameter);//这里开始出问题,贴上代码
//为响应客户端的请求准备数据
var timeStamp = GetTimeStamp();
var prepayId = xe.Element("prepay_id").Value;
nstr = xe.Element("nonce_str").Value;
Hashtable paySignReqHandler = new Hashtable();
paySignReqHandler.Add("appid", this.AppId);
paySignReqHandler.Add("partnerid", this.MchId);
paySignReqHandler.Add("prepayid", prepayId);
paySignReqHandler.Add("noncestr", nstr);
paySignReqHandler.Add("package", packageStr);
paySignReqHandler.Add("timestamp", timeStamp.ToString());
var paySign = CreateMd5Sign(paySignReqHandler);
var obj = new
{
appid = this.AppId,
partnerid = this.MchId,
prepayid = prepayId,
package = packageStr,
noncestr = nstr,
timestamp = timeStamp,
sign = paySign
};
var serializer = new JavaScriptSerializer();
var result = serializer.Serialize(obj);
return result;
}



private XElement PostDataToWeiXin(Hashtable parameters)
{
var xmlStr = getXmlStr(parameters);
var data = Encoding.UTF8.GetBytes(xmlStr);
Stream responseStream;
HttpWebRequest request = WebRequest.Create(WeiXinPayUrl) as HttpWebRequest;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.ContentLength = data.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
try
{
responseStream = request.GetResponse().GetResponseStream(); //这里请求就会出现如图中的提示,如【1】图
}
catch (Exception exception)
{
throw exception;
}
string str = string.Empty;
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
str = reader.ReadToEnd();
}
responseStream.Close();
var xe = XElement.Parse(str);
return xe;
}

【1】图

(4)最后代码中,这段始终执行不下去。
var prepayId = xe.Element("prepay_id").Value;
提示为null。
请求大家给个建议。跪谢了!
...全文
532 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruan1978 2018-10-23
  • 打赏
  • 举报
回复
坑的wx,重置了apikey ,全部搞定了!
ruan1978 2018-10-19
  • 打赏
  • 举报
回复
请求人帮助!

869

社区成员

发帖
与我相关
我的任务
社区描述
本版块主要讨论微信支付开发接入过程中的技术问题。包括微信支付线上线下支付的接入,微信支付营销能力的开发等。
微信社交电子 技术论坛(原bbs)
社区管理员
  • 微信支付
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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