用户扫码微信二维码生成订单(三)

官方API:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

首先要修改/lib/HttpService.cs

把Get和Post中的的设置代理服务器代码进行隐藏:

修改前:

WebProxy proxy = new WebProxy();
proxy.Address = new Uri(WxPayConfig.PROXY_URL);
request.Proxy = proxy;

修改后:

//WebProxy proxy = new WebProxy();
//proxy.Address = new Uri(WxPayConfig.PROXY_URL);
//request.Proxy = proxy;

正文:

(注:用户必须把项目放到外网连接上才可以进行回调,生成订单。例如:http://www.xxxx.com/Wx/example/NativeNotifyPage.aspx---微信公众平台配置的回调)

用户扫码微信二维码后,微信服务器端会回调到用户在微信公众平台配置的回调url:/example/NativeNotifyPage.aspx

NativeNotify nativeNatify = new NativeNotify(this);
nativeNatify.ProcessNotify();

ProcessNotify:(检查回调数据是否正常,正常就进行统一下单,统一成功下单后,用户可以加入自己的逻辑,最后返回结果给微信服务器确定下单)

 public override void ProcessNotify()
        {
            WxPayData notifyData = GetNotifyData();

            //检查openid和product_id是否返回
            if (!notifyData.IsSet("openid") || !notifyData.IsSet("product_id"))
            {
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "回调数据异常");
                Log.Info(this.GetType().ToString(), "The data WeChat post is error : " + res.ToXml());
                page.Response.Write(res.ToXml());
                page.Response.End();
            }

            //调统一下单接口,获得下单结果
            string openid = notifyData.GetValue("openid").ToString();
            string product_id = notifyData.GetValue("product_id").ToString();
            WxPayData unifiedOrderResult = new WxPayData();
            try
            {
                unifiedOrderResult = UnifiedOrder(openid, product_id);
            }
            catch(Exception ex)//若在调统一下单接口时抛异常,立即返回结果给微信支付后台
            {
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "统一下单失败");
                Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + res.ToXml());
                page.Response.Write(res.ToXml());
                page.Response.End();
            }

            //若下单失败,则立即返回结果给微信支付后台
            if (!unifiedOrderResult.IsSet("appid") || !unifiedOrderResult.IsSet("mch_id") || !unifiedOrderResult.IsSet("prepay_id"))
            {
                WxPayData res = new WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "统一下单失败");
                Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + res.ToXml());
                page.Response.Write(res.ToXml());
                page.Response.End();
            }
       //用户可以加入自己的逻辑
            //统一下单成功,则返回成功结果给微信支付后台
            WxPayData data = new WxPayData();
            data.SetValue("return_code", "SUCCESS");
            data.SetValue("return_msg", "OK");
            data.SetValue("appid", WxPayConfig.APPID);
            data.SetValue("mch_id", WxPayConfig.MCHID);
            data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
            data.SetValue("prepay_id", unifiedOrderResult.GetValue("prepay_id"));
            data.SetValue("result_code", "SUCCESS");
            data.SetValue("err_code_des", "OK");
            data.SetValue("sign", data.MakeSign());

            Log.Info(this.GetType().ToString(), "UnifiedOrder success , send data to WeChat : " + data.ToXml());
            page.Response.Write(data.ToXml());
            page.Response.End();
        }

统一下单(用户可以根据自己的需要来修改参数,生成自己的订单):

 private WxPayData UnifiedOrder(string openId,string productId)
        {
            //统一下单
            WxPayData req = new WxPayData();
            req.SetValue("body", "test");//这个是内容,显示在订单上的,这个内容用户可以自行修改
            req.SetValue("attach", "test");
            req.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());
            req.SetValue("total_fee", 1);//这个是金额,1代表1分钱,钱数用户也可以修改
            req.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            req.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
            req.SetValue("goods_tag", "test");
            req.SetValue("trade_type", "NATIVE");
            req.SetValue("openid", openId);
            req.SetValue("product_id", productId);//这个是商品的ID
            WxPayData result = WxPayApi.UnifiedOrder(req);
            return result;
        }

统一下单成功后(生成类似这样的订单):

时间: 2024-08-27 04:03:25

用户扫码微信二维码生成订单(三)的相关文章

用微信二维码登录自己的网站

地址:http://www.cnblogs.com/loogn/p/3727953.html用微信二维码登录自己的网站 一.当用户选择用微信二维码登录时,我们要在用户页面里生成一个guid做为客户端的唯一标识,然后带着这个guid请求二维码图片地址,得到地址后,显示给用户.请求到后台的时候要将此二维码的Key和客户端的guid关联到一起.注意这个key的生成方式,要保证多人同时用二维码登录而不冲突,比如用10000自增,隔断时间又重置到10000. 二.得到二维码后,马上发出长链接请求登录标识(

微信二维码微信公众号二维码怎么生成?

为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. #生成二维码接口 https://open.weixin.qq.com/qr/code?username=weihaobang 微信公众号渠道二维码生成.具体查看流程如下:登录微号帮->功能管理->渠道二维码生成/二维码海报/带参数的二维码,创建设置,二维码由系统自动生成,可以选择带不带logo.默认显示带logo的黑白二

微信二维码来源统计自动生成二维码统计?

微信二维码来源统计,我们先来了解下渠道二维码,我们的微信公众号使用渠道二维码可以实现记录粉丝是通过二维码扫描关注并进入活动功能的统计,渠道二维码还可以让粉丝扫码后直接关注成为粉丝并直接弹出微信活动的页面,真正实现关注加参与微信活动的快捷体验,然后就是注册微号帮平台,授权我们的认证服务号,才可以实现渠道二维码. 自动生成二维码统计操作.微信服务号如何授权微号帮平台?1.微信公众号授权微号帮平台(1)添加授权公众号 (2)微信扫码授权公众号使用微信公众平台绑定的管理员个人微信号扫描 (3)微信公众号

微信公众平台开发(121) 微信二维码海报

关键字:微信公众平台 二维码 海报作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/weixin-poster.html 本文介绍微信公众平台下二维码海报的开发过程. 一.微信二维码海报介绍 微信二维码海报是指在海报中嵌入和微信用户关联的参数二维码的海报,用户分享推广之后,新用户可以被统计为被推广人员数,从而达到增加粉丝的传播效果.其使用场景如下:   二.开发流程 在微信二维码海报生成中,需要用到以下信息 1. 自定义菜单中设置一个菜单项,点击后返回二维

微信二维码防伪

微信二维码防伪应用介绍 如今各大企业都在考虑如何做到产品线上线下发展,微信是现如今O2O发展最为前沿的科技产物,防伪公司现如今在二维码.微信防伪方面不断的取得了新的创新,如何真正帮助企业更好的实现线上宣传,线下销售,也是防伪公司如今考虑最为重要的原因之一,本篇通过凯迅惠商防伪公司如何利用微信防伪.二维码防伪给企业产品做到既能防伪.又能给企业宣传和营销起到重要作用. 微信防伪价值 微信防伪是现如今市场中新推出的防伪产物之一,根据如今企业发展,微信用户群的不断增加,微信防伪也在防伪行业展开,微信防伪

C# winform 实现微信二维码登录、第三方登录(已实现、附源码)

原文:C# winform 实现微信二维码登录.第三方登录(已实现.附源码) 前言 应上级要求,在项目登录的时候实现第三方登录.很荣幸我接到了这个任务,但是我之前完全都没接触到.开发周期是三天,对于我们这种小白完全是从零开始.最后成功的实现这个功能固然重要,但是这个探索的过程才值得回味.光需要代码可以直接下载源码,我们重要说下实现过程和步骤,自己也巩固和记录一下! 实现步骤 1. 我实现的是微信扫码登录,当然要知道微信给的接口,可以在https://open.weixin.qq.com/ 这里申

你的微信二维码是唯一的吗?【微信二维码的秘密】

最近听说有一老板被一科技公司业务员忽悠,说"您赶快来注册您唯一的二维码吧!否则,会被别人抢注的!" 很多人以为自己的微信二维码.网站的二维码是唯一的,果真如此吗?事实上,不是! 你的二维码可以是多种多样的,这里以我所掌管的"掌上龙岗"微信号为例进行说明. "掌上龙岗"的微信号是szlgwx,二维码则可以至少用以下几种: (L)(M)(Q)(H) 打开你的手机,使用手机微信"扫一扫"功能,扫描上面几种和下面的二维码,均可直接添加

注册绑定页面及微信二维码登陆页面开发项目总结

乐帝来到新的实习单位,也许是之前面试或者在爱奇艺实习的履历,很快被项目组"委以重任".而不是老套路刚入职,先在架构师那培训两周,专心钻研框架,不问具体业务.乐帝只有几天看框架的时间,当被分配给框架页面时,还是不能得心应手,正如同事所说,学习还得按部就班,写写例子,看代码是不行的.    目前这家公司类似<走出软件作坊>作者阿朱所在行业,是面向中大型企业,提供人才管理解决方案的软件公司,时髦的词叫SAAS.这类公司层次要比外包公司高,却还有很多外包公司的特点,不像互联网公司有

戴志康谈微信二维码运营:学会注重结果

在9月19日的财付通7周年沟通会上,腾讯生活服务电商部副总经理戴志康(微博)以“互联网应该如何运营”谈及微信二维码未来的O2O发展潜力,他同时认为作为互联网人给传统行业带来的是改革,而不是改变. 戴志康认为,传统的互联网运营更侧重口碑.品牌等“过程”,而对商家来说更重要的是到店率.是对最终销量的影响等“结果”,想出的办法就是用二维码.LBS结合这两者.他还引用了微信创始人张小龙的说法,“搜索框是PC的互联网入口,二维码是微信的互联网入口”.同时由于本身存在的关系链,每个用户都有可能成为影响朋友购