现在微信支付二维码, 已经比较常见了, 但是代码各种各样, 有时候经常查找资料, 找到得代码不一样, 也会出现问题, 要不这个地方出错,那个地方出错,没有一个完整得代码。 今天新开项目, 做支付, 就把微信支付的代码重新整理了下,先把源码粘贴如下, 需要得拿走不谢哈
1. 获取微信支付二维码链接
[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;
}
2. 获取到url地址后, 将rul地址转换成图片流,直接输出
[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();
}
}
以上方法为主方法, 下载源码,请点击》》
weixinpay_API_20210615.zip
(9.59 KB, 下载次数: 0)
|