业务流程:
商户后台系统调用微信支付统一下单生成预付交易,将接口返回的链接生成二维码,用户扫码后输入密码完成支付交易。注意:该模式的预付单有效期为2小时,过期后无法支付。
这种模式比较简单,直接生成二维码供用户扫码进行支付
代码:
public JsonResult GetQrCode2(string no) { string timeStamp = Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetTimestamp(); string nonceStr = Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr(); string body = "Test-Native";//商品或支付单简要描述 string out_trade_no = no;//商户系统内部的订单号,32个字符内,可包含字母,其他说明见商户订单号 int total_fee = 2;//Convert.ToInt32(trade.TRADE_PAYMENT.Value*100);//订单总金额,只能是整数。 string spbill_create_ip = Request.UserHostAddress;//APP和网页支付提交用户端IP,Native支付填调用微信支付API的机器IP string notify_url = "http://×××/PayNotifyUrl";//接收微信支付异步通知回调地址 string trade_type = "NATIVE";//JSAPI,NATIVE,APP,WAP string product_id = no; //创建支付应答对象 Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null); //初始化 packageReqHandler.Init(); //设置package订单参数 packageReqHandler.SetParameter("appid", AppId); packageReqHandler.SetParameter("mch_id", MchId); packageReqHandler.SetParameter("nonce_str", nonceStr); packageReqHandler.SetParameter("body", body); packageReqHandler.SetParameter("out_trade_no", out_trade_no); packageReqHandler.SetParameter("total_fee", total_fee.ToString()); packageReqHandler.SetParameter("spbill_create_ip", spbill_create_ip); packageReqHandler.SetParameter("notify_url", notify_url); packageReqHandler.SetParameter("trade_type", trade_type); packageReqHandler.SetParameter("product_id", product_id); string sign = packageReqHandler.CreateMd5Sign("key", Key); packageReqHandler.SetParameter("sign", sign); string data = packageReqHandler.ParseXML(); //调用统一下订单接口。 var UnifiedorderResult = Senparc.Weixin.MP.AdvancedAPIs.TenPayV3.Unifiedorder(data); var res = System.Xml.Linq.XDocument.Parse(UnifiedorderResult); string code_url = res.Element("xml").Element("code_url").Value; string url = "http://qr.liantu.com/api.php?text=" + code_url; return Json(url); }