private static string genPackageSign(WXPrePost postParams) { //拼接排序list Dictionary <string, string> packageParams = new Dictionary <string, string>(); packageParams.Add("appid", postParams.appid); packageParams.Add("body", postParams.body); packageParams.Add("detail", postParams.detail); packageParams.Add("mch_id", postParams.mch_id); packageParams.Add("nonce_str", postParams.nonce_str); packageParams.Add("notify_url", postParams.notify_url); packageParams.Add("out_trade_no", postParams.out_trade_no); packageParams.Add("spbill_create_ip", postParams.spbill_create_ip); packageParams.Add("total_fee", postParams.total_fee + ""); packageParams.Add("trade_type", postParams.trade_type); StringBuilder sb = new StringBuilder(); foreach (var packageParam in packageParams) { sb.Append(packageParam.Key); sb.Append('='); sb.Append(packageParam.Value); sb.Append('&'); } sb.Append("key="); sb.Append(PartnerKey);//key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 //这里又用到了从实例代码复制的MD5 可以去上面copy String packageSign = MD5Tool.GetMD5(sb.ToString()).ToUpper(); return(packageSign); }
//-----------------------微信下单代码---------------------- //微信统一下单 public static WeChatOrderInfo WeChatPlaceOrder(float money) { WXPrePost post = new WXPrePost(); post.appid = Pay_App_Id; post.mch_id = PartnerId; post.nonce_str = genNonceStr(32); //随机字符串 **1 不超过32位 post.body = "商品购买"; //商品标题 post.detail = "用于购买商品"; //详细信息 post.out_trade_no = TopUpComponent.GetTradeNo(); //商户订单号 **2 post.total_fee = (int)(money * 100); //单位是分 post.spbill_create_ip = "127.0.0.1"; //ip地址 **3 post.notify_url = GetOuterPostAddress(); //这里是后台接受支付结果通知的url地址 post.trade_type = "APP"; post.sign = genPackageSign(post); //签名 Dictionary <string, string> firstSignParams = getFirstSignParams(post); string xmlParams = toXml(firstSignParams); string callStr = HttpPost.Post(PlaceOrderUrl, xmlParams); // Console.WriteLine("收到下单回调:"); // Console.WriteLine(callStr); XElement xe = XElement.Parse(callStr); string prepayId = xe.Element("prepay_id").Value; string nonceStr = xe.Element("nonce_str").Value; // Console.WriteLine("prepay_id:"+ prepayId); // Console.WriteLine("nonce_str:" + nonceStr); return(WeChatOrderInfoFactory.Creator(prepayId, nonceStr, post.out_trade_no)); }
private static Dictionary <string, string> getFirstSignParams(WXPrePost postParams) { Dictionary <string, string> packageParams = new Dictionary <string, string>(); packageParams.Add("appid", postParams.appid); packageParams.Add("body", postParams.body); packageParams.Add("detail", postParams.detail); packageParams.Add("mch_id", postParams.mch_id); packageParams.Add("nonce_str", postParams.nonce_str); packageParams.Add("notify_url", postParams.notify_url); packageParams.Add("out_trade_no", postParams.out_trade_no); packageParams.Add("spbill_create_ip", postParams.spbill_create_ip); packageParams.Add("total_fee", postParams.total_fee + ""); packageParams.Add("trade_type", postParams.trade_type); packageParams.Add("sign", postParams.sign); return(packageParams); }