微信扫码支付asp.net(C#)实现步骤<转>

今天刚刚开始接触微信支付,从网上找了些资料,先整理在这,但是还没有经过测试

作者:威流微信公众平台开发研究工作室

原文链接:http://www.cnblogs.com/valu/p/4339939.html

支付提交页面:

        [HttpPost]
        public ActionResult index(decimal amount)
        {
            //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
            string order_no = DateTime.Now.ToString("yyyyMMddHHmmss") + TenpayUtil.BuildRandomStr(4);
            //这里是数据操作,代码已删除

            ViewData["weixin_pay_qr_code"] = string.Format("/get_qrcode?product_id={0}", order_no);
            return View();
        }

输出二维码:

        public void get_qrcode(string product_id)
        {
            WxPayHelper helper = new WxPayHelper();
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("appid", config_util.mp_weixin_appid);
            dic.Add("mch_id", config_util.weixin_mch_id);
            dic.Add("nonce_str", TenpayUtil.getNoncestr());
            dic.Add("product_id", product_id);
            dic.Add("time_stamp", TenpayUtil.getTimestamp());
            dic.Add("sign", helper.GetSign(dic));
            string url = WxPayHelper.FormatBizQueryParaMap(dic, false);//这里不要url编码

            string code = "weixin://wxpay/bizpayurl?" + url;
            var qrc = Create_ImgCode(code, 6);
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            qrc.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
            byte[] bytes = ms.GetBuffer();  //byte[]   bytes=   ms.ToArray(); 这两句都可以,至于区别么,下面有解释
            ms.Close();

            Response.BinaryWrite(bytes);
            return;
        }

原生拉取微信支付代码:

        public ContentResult index()
        {

            if (Request.RequestType == "POST")
            {
                try
                {
                    WxPayHelper helper = new WxPayHelper();
                    StreamReader reader = new StreamReader(Request.InputStream);
                    String xmlData = reader.ReadToEnd();
                    helper.ReceivePostXmlData(xmlData);
                    common_util.WriteLog("接收post来的xmlData=" + xmlData);
                    if (helper.CheckSign())
                    {
                        common_util.WriteLog("签名验证通过");
                        string product_id = helper.GetProductId();
                        common_util.WriteLog("产品id=" + product_id);
                        string order_no = product_id;if (产品ID存在)
                        {
                            #region 业务处理
                            helper.SetParameter("body", "用户充值,用户号:" + item.user_id);
                            helper.SetParameter("out_trade_no", order_no);
                            helper.SetParameter("total_fee", (item.amount * 100).ToString("#"));//这里单位是分
                            helper.SetParameter("notify_url", "http//www.openweixin.com.cn/notify");
                            helper.SetParameter("trade_type", "NATIVE");
                            string prepay_id = helper.GetPrepayId();
                            common_util.WriteLog("prepay_id=" + prepay_id);
                            if (!string.IsNullOrEmpty(prepay_id))
                            {
                                helper.SetReturnParameter("return_code", "SUCCESS");
                                helper.SetReturnParameter("result_code", "SUCCESS");
                                helper.SetReturnParameter("prepay_id", prepay_id);
                                helper.SetReturnParameter("appid", helper.GetAppId);
                                helper.SetReturnParameter("mch_id", helper.GetMch_Id);
                                helper.SetReturnParameter("nonce_str", TenpayUtil.getNoncestr());
                            }
                            else
                            {
                                helper.SetReturnParameter("return_code", "SUCCESS");//返回状态码
                                helper.SetReturnParameter("result_code", "FAIL");//业务结果
                                helper.SetReturnParameter("err_code_des", "预订单生产失败");
                            }
                            #endregion
                        }
                        else
                        {
                            helper.SetReturnParameter("return_code", "SUCCESS");//返回状态码
                            helper.SetReturnParameter("result_code", "FAIL");//业务结果
                            helper.SetReturnParameter("err_code_des", "此商品无效");//业务结果
                        }
                    }
                    else
                    {
                        helper.SetReturnParameter("return_code", "FAIL");
                        helper.SetReturnParameter("return_msg", "签名失败");
                        common_util.WriteLog("签名验证没有通过");
                    }
                    string xmlStr = helper.GetReturnXml();
                    common_util.WriteLog("返回xml=" + xmlStr);
                    Response.ContentType = "text/xml";
                    Response.Clear();
                    Response.Write(xmlStr);
                    Response.End();
                }
                catch (Exception ex)
                {
                    common_util.WriteLog("异常了" + ex);
                }
            }
            return Content("OK");
        }

支付成功通知页面:

            if (Request.RequestType == "POST")
            {
                try
                {
                    WxPayHelper helper = new WxPayHelper();
                    StreamReader reader = new StreamReader(Request.InputStream);
                    String xmlData = reader.ReadToEnd();
                    helper.ReceivePostXmlData(xmlData);
                    common_util.WriteLog("Notify_接收post来的xmlData=" + xmlData);
                    if (helper.CheckSign())
                    {
                        Dictionary<string, string> dicBack = helper.GetParameter();//获取所有参数
                        if (dicBack != null && dicBack.Keys.Contains("return_code"))
                        {
                            if (dicBack["return_code"] == "SUCCESS")
                            {
                                common_util.WriteLog("return_code=SUCCESS");
                                if (dicBack["result_code"] == "SUCCESS")
                                {
                                    common_util.WriteLog("result_code=SUCCESS");
                                    string out_trade_no = dicBack["out_trade_no"];//商户订单号
                                    common_util.WriteLog("out_trade_no=" + out_trade_no);

                                    //1.验证商户订单号是否被处理
                                    //2.处理过直接返回成功,否则返回
                                    //此处根据out_trade_no 处理业务数据
                                    //处理业务数据结束

                                    common_util.WriteLog("Notify_验证签名成功");
                                    helper.SetReturnParameter("return_code", "SUCCESS");
                                    helper.SetReturnParameter("return_msg", "");
                                }
                            }
                            if (dicBack["return_code"] == "FAIL")
                            {
                                common_util.WriteLog("Notify_验证签名成功");
                                helper.SetReturnParameter("return_code", "SUCCESS");
                                helper.SetReturnParameter("return_msg", dicBack["return_msg"]);
                            }
                        }
                    }
                    else
                    {
                        common_util.WriteLog("Notify_验证签名失败");
                        helper.SetReturnParameter("return_code", "FAIL");
                        helper.SetReturnParameter("return_msg", "签名失败");
                    }
                    string xmlStr = helper.GetReturnXml();
                    common_util.WriteLog("Notify_返回xml=" + xmlStr);
                    Response.ContentType = "text/xml";
                    Response.Clear();
                    Response.Write(xmlStr);
                    Response.End();
                }
                catch (Exception ex)
                {
                    common_util.WriteLog("Notify_异常了" + ex);
                }
            }
            return Content("OK");

时间: 2024-10-06 00:43:13

微信扫码支付asp.net(C#)实现步骤<转>的相关文章

微信扫码支付asp.net(C#)实现步骤

支付提交页面: [HttpPost] public ActionResult index(decimal amount) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 string order_no = DateTime.Now.ToString("yyyyMMddHHmmss") + TenpayUtil.BuildRandomStr(4); //这里是数据操作,代码已删除 ViewData["weixin_pay_qr_code&quo

微信扫码支付+Asp.Net MVC

这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下. 一.准备工作 使用的微信API中的统一下单方法,关键的参数是‘公众账号ID(appid)’,‘商户号(mch_id)’和’商户支付密钥(KEY)‘,所以首先要有一个审核过的公众号,并开通支付功能,然后申请商户,通过审核后得到商户号,也就是商户平台的登录名.商户支付密钥是用来签名的,确保url不被篡改.进入商户平台后在API安全中设置,是一个32位的字符串. 有这三个参数后,还有一点要注意的

Net MVC微信扫码支付

微信扫码支付+Asp.Net MVC 这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下. 一.准备工作 使用的微信API中的统一下单方法,关键的参数是‘公众账号ID(appid)’,‘商户号(mch_id)’和’商户支付密钥(KEY)‘,所以首先要有一个审核过的公众号,并开通支付功能,然后申请商户,通过审核后得到商户号,也就是商户平台的登录名.商户支付密钥是用来签名的,确保url不被篡改.进入商户平台后在API安全中设置,是一个32位的字符

C#微信扫码支付,回调页面

[C#]C# 微信扫码支付 回调页面 C# 微信扫码支付 回调页面 .NET版 微信扫码支付,官方推荐使用[模式二]一.微信扫码支付模式一:1.回调页面:官方demo中example文件下的NativeNotifyPage.aspx2.微信回调地址:http://域名/目录/NativeNotifyPage.aspx是在公众账号平台里面设置的,如下图 二.微信扫码支付模式二:1.回调页面:官方demo中example文件下的ResultNotifyPage.aspx2.微信回调地址:http:/

JAVA微信扫码支付模式二功能实现以及回调

一.准备工作 首先吐槽一下微信关于支付这块,本身支持的支付模式就好几种,但是官方文档特别零散,连像样的JAVA相关的demo也没几个.本人之前没有搞过微信支付,一开始真是被它搞晕,折腾两天终于调通了,特此写下来,以享后人吧! 关于准备工作,就"微信扫码支付模式二"官方文档地址在这 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 可以先看看,实际上需要准备的东西有以下几个: 其中APP_ID和APP_SECRET

ThinkPHP微信扫码支付接口

最近折腾微信扫码支付,看了微信官方文档,找了很多网页,发现和文档/demo不匹配,现在自己算是弄出来了(文件名称有所更改),贴出来分享一下 一.将有用的官方lib文件和使用的相关文件放置到vendor当中 二.调用同一支付接口 WechatController //调用同一支付接口public function native($v_oid='',$v_amount=''){ ini_set('date.timezone','Asia/Shanghai'); error_reporting(E_E

微信扫码支付官方配置

微信扫码支付官方API: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 .net C# SDK: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1 介绍扫码支付模式一: 首先要配置:微信公众平台>微信支付>开发配置 支付授权目录:就是项目中存放官方SDK的运行路径.例如:http://www.xxxx.com/Wx/或者http://www.

C# 微信扫码支付API (微信扫码支付模式二)

一.SDK下载地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1,下载.NET C#版本: 二.微信相关设置:(微信扫码支付模式二) 1. 公众账号ID,公众账号secert ,地址:https://mp.weixin.qq.com/ 2. 商户号,商户支付密钥KEY,商户平台地址:https://pay.weixin.qq.com/ 5. 部署的服务器终端ip及回调页面 (1)部署的服务器终端ip:即程序部署所在的

C# 微信扫码支付 回调页面

.NET版 微信扫码支付,官方推荐使用[模式二] 一.微信扫码支付模式一: 1.回调页面:官方demo中example文件下的NativeNotifyPage.aspx 2.微信回调地址:http://域名/目录/NativeNotifyPage.aspx 是在公众账号平台里面设置的,如下图 二.微信扫码支付模式二: 1.回调页面:官方demo中example文件下的ResultNotifyPage.aspx 2.微信回调地址:http://域名/目录/NativeNotifyPage.aspx