public static SortedDictionary <string, object> AppPay(string body, string NotifyUrl, string orderid, string openid, decimal paymoney, string clientIp) { //string logStr=@"D:\ppp\log\WXPay\wx_AppPay_" + DateTime.Today.ToString("yyyyMMdd") + ".txt"; UnifiedOrderInfo info = new UnifiedOrderInfo() { Body = body, OutTradeNo = orderid, OpenId = "", TotalFee = (int)(Math.Round(paymoney, 2, MidpointRounding.AwayFromZero) * 100), SpbillCreateIp = clientIp, NotifyUrl = NotifyUrl, Trade_type = "APP" }; string NonceStr = UtilTool.GenerateCode(32); info.NonceStr = NonceStr; //Util.WriteFile(logStr, @"WX AppPay Call======================" + DateTime.Now.ToString()); //Util.WriteFile(logStr, @"Client IP:" + info.SpbillCreateIp); WxPayDataTool paytool = WxPayAction.UnifiedOrder(info); // Util.WriteFile(logStr,@"微信返回信息:"+paytool.ToJson()); if (paytool.GetValue("return_code").ToString() == "SUCCESS") { if (paytool.GetValue("result_code").ToString() == "SUCCESS") { WxPayDataTool paytool2Sign = new WxPayDataTool(); PayAccountInfo payaccount = new PayAccountInfo(); paytool2Sign.SetValue("appid", payaccount.AppId); paytool2Sign.SetValue("noncestr", info.NonceStr);//此参数虽然是随机码 但是必须和之前请求微信时的随机码一致 paytool2Sign.SetValue("package", "Sign=WXPay"); paytool2Sign.SetValue("partnerid", payaccount.PartnerId); paytool2Sign.SetValue("prepayid", paytool.GetValue("prepay_id")); paytool2Sign.SetValue("timestamp", UtilTool.GenerateUnixTime()); string sign = paytool2Sign.MakeSign(payaccount.PartnerKey); paytool2Sign.SetValue("sign", sign); return(paytool2Sign.GetValues()); } else { return(null); } } else { return(null); } }
/// <summary> /// 订单查询 /// </summary> /// <param name="info"></param> /// <returns></returns> public static WxPayDataTool Orderquery(OrderqueryInfo info) { string url = "https://api.mch.weixin.qq.com/pay/orderquery"; WxPayDataTool paytool = new WxPayDataTool(); paytool.SetValue("appid", info.AppId); paytool.SetValue("mch_id", info.PartnerId); if (!string.IsNullOrEmpty(info.Transaction_id)) { paytool.SetValue("transaction_id", info.Transaction_id); } if (!string.IsNullOrEmpty(info.Out_trade_no)) { paytool.SetValue("out_trade_no", info.Out_trade_no); } paytool.SetValue("nonce_str", UtilTool.GenerateCode(32)); //随机字符串 不超过32位 paytool.SetValue("sign", paytool.MakeSign(info.PartnerKey)); //签名 WxPayDataTool result = GetResult(url, paytool, false); return(result); }
//H5调起js支付 public static WxPayDataTool GetJsApiParameters(UnifiedOrderInfo info) { string prepay_id = ""; WxPayDataTool payresult = UnifiedOrder(info); if (CheckReturn(payresult)) // LogDB.DebugTest("统一下单信息出错:" + payresult.ToJson()); // else { if (payresult.IsSet("prepay_id") && (prepay_id = payresult.GetValue("prepay_id").ToString()) != "") { WxPayDataTool jsApiParam = new WxPayDataTool(); jsApiParam.SetValue("appId", info.AppId); jsApiParam.SetValue("timeStamp", UtilTool.GenerateUnixTime()); jsApiParam.SetValue("nonceStr", UtilTool.GenerateCode(15)); jsApiParam.SetValue("package", "prepay_id=" + prepay_id); jsApiParam.SetValue("signType", "MD5"); jsApiParam.SetValue("paySign", jsApiParam.MakeSign(info.PartnerKey)); return(jsApiParam); } } return(new WxPayDataTool()); }
//统一订单 public static WxPayDataTool UnifiedOrder(UnifiedOrderInfo info) { string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; if (string.IsNullOrWhiteSpace(info.NonceStr)) { info.NonceStr = UtilTool.GenerateCode(32); } WxPayDataTool paytool = new WxPayDataTool(); paytool.SetValue("appid", info.AppId); paytool.SetValue("mch_id", info.PartnerId); paytool.SetValue("device_info", ""); paytool.SetValue("nonce_str", info.NonceStr); paytool.SetValue("body", info.Body); paytool.SetValue("attach", ""); paytool.SetValue("out_trade_no", info.OutTradeNo); paytool.SetValue("total_fee", (int)info.TotalFee); paytool.SetValue("spbill_create_ip", info.SpbillCreateIp); paytool.SetValue("time_start", ""); paytool.SetValue("time_expire", ""); paytool.SetValue("goods_tag", info.GoodsTag); paytool.SetValue("notify_url", info.NotifyUrl); paytool.SetValue("trade_type", info.Trade_type); paytool.SetValue("openid", info.OpenId); string signstr = paytool.MakeSign(info.PartnerKey); paytool.SetValue("sign", signstr); WxPayDataTool result = GetResult(url, paytool, false); if (!CheckReturn(result)) { //LogDB.DebugTest("统一下单信息失败:" + result.ToJson()); } return(result); }