[C#] 纯文本查看 复制代码
WxPayData data = new WxPayData(config);
data.SetValue("body", $"苏飞论坛[个人vip半年]订单");//商品描述
data.SetValue("attach", string.Format("{0}SUFEINETTC{1}", uinfo.comid, uinfo.uid));//附加数据
data.SetValue("out_trade_no", out_trade_no);//随机字符串
data.SetValue("total_fee", 100);//总金额
data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
data.SetValue("goods_tag", "苏飞论坛[个人vip半年]套餐订单");//商品标记
data.SetValue("trade_type", "NATIVE");//交易类型out_trade_no
data.SetValue("product_id", order_id);//商品ID
data.SetValue("notify_url", "http://sufeinet.com/admin/membercenter/wxnotify.aspx");//回调地址
WxPayData wx_result = new WxPayApi(config).UnifiedOrder(data);//调用统一下单接口
string url = wx_result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接
GetUrlImg(url);
[C#] 纯文本查看 复制代码
/**
*
* 统一下单
* @param WxPaydata inputObj 提交给统一下单API的参数
* @param int timeOut 超时时间
* @throws WxPayException
* @return 成功时返回,其他抛异常
*/
public WxPayData UnifiedOrder(WxPayData inputObj, int timeOut = 30)
{
string url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
//检测必填参数
if (!inputObj.IsSet("out_trade_no"))
{
throw new WxPayException("缺少统一支付接口必填参数out_trade_no!");
}
else if (!inputObj.IsSet("body"))
{
throw new WxPayException("缺少统一支付接口必填参数body!");
}
else if (!inputObj.IsSet("total_fee"))
{
throw new WxPayException("缺少统一支付接口必填参数total_fee!");
}
else if (!inputObj.IsSet("trade_type"))
{
throw new WxPayException("缺少统一支付接口必填参数trade_type!");
}
//关联参数
if (inputObj.GetValue("trade_type").ToString() == "JSAPI" && !inputObj.IsSet("openid"))
{
throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!");
}
if (inputObj.GetValue("trade_type").ToString() == "NATIVE" && !inputObj.IsSet("product_id"))
{
throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!");
}
//异步通知url未设置,则使用配置文件中的url
if (!inputObj.IsSet("notify_url"))
{
inputObj.SetValue("notify_url", WxPayConfig.NOTIFY_URL);//异步通知url
}
inputObj.SetValue("appid", WxPayConfig.APPID);//公众账号ID
inputObj.SetValue("mch_id", WxPayConfig.MCHID);//商户号
inputObj.SetValue("spbill_create_ip", WxPayConfig.IP);//终端ip
inputObj.SetValue("nonce_str", GenerateNonceStr());//随机字符串
//签名
inputObj.SetValue("sign", inputObj.MakeSign());
string xml = inputObj.ToXml();
var start = DateTime.Now;
//Log.Debug("WxPayApi", "UnfiedOrder request : " + xml);
string response = HttpService.Post(xml, url, false, timeOut);
//Log.Debug("WxPayApi", "UnfiedOrder response : " + response);
//var end = DateTime.Now;
//int timeCost = (int)((end - start).TotalMilliseconds);
WxPayData result = new WxPayData(WxPayConfig);
result.FromXml(response);
//ReportCostTime(url, timeCost, result);//测速上报
return result;
}
[C#] 纯文本查看 复制代码
/// <summary>
/// 将微信范围的url生成二维码
/// </summary>
/// <param name="url"></param>
private void GetUrlImg(string url)
{
QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
QrCode qrCode = new QrCode();
qrEncoder.TryEncode(url, out qrCode);
using (MemoryStream ms = new MemoryStream())
{
var renderer = new GraphicsRenderer(new FixedModuleSize(4, QuietZoneModules.Two));
renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, ms);
this.Response.Clear();
Response.ContentType = "image/png";
Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
this.Response.End();
}
}