C#微信交互

 微信登录

<script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

// 第三方登录-微信
$("#wechatAppBtn").click(function () {
    var obj = new WxLogin({
        id: "wxCode",//div的id
        appid: "wxc4304e69d9430781",//后台申请的appid
        scope: "snsapi_login",//写死
        redirect_uri: encodeURI("https://www.wangjp.com/webnew/login_wx.aspx"),  //扫描二维码后跳转的页面
        state: "",
        style: "black",//二维码黑白风格
        href: ""
    });
    $(".maskCon").show();
});

<div style="width: 80%;margin: 0 auto;">
<div id="wechatAppBtn" style="width: 40px;margin: 0 auto;cursor:pointer;">
    <img src="../images/icon_wechatApp.png" style="width: 100%;vertical-align: middle;"/>
</div>

protected void Page_Load(object sender, EventArgs e)
        {
            string code = Request.QueryString["code"];
            if (code == null) { code = ""; }
            if (string.IsNullOrEmpty(code))
            {
                Response.Write("<script language='javascript'>");
                Response.Write("alert('code不能为空!');");
                Response.Write("history.back();");
                Response.Write("</script>");
            }
            string APPID = "wxc4304e69dwangjp";
            string SECRET = "wangjpwangjpwangjp";
            string strUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APPID + "&secret=" + SECRET + "&code=" + code + "&grant_type=authorization_code";
            string content = yzin.GetPage(strUrl);
            JObject obj = JObject.Parse(content);
            string openid = obj["openid"].ToString();
            if (string.IsNullOrEmpty(openid))
            {
                Response.Redirect("login.aspx");
                return;
            }
            Response.Cookies["openid_wx"].Value = openid;// 第三方app返回的id
            Response.Cookies["openid_type"].Value = "0";// 第三方类型 0:微信
                                                        // TODO 根据openid查询
}

微信支付

// 支付
            $("#Button1").click(function () {
                payType = $("input[type='radio']:checked").val();
                console.log("[payType]"+payType);
                $("#payListCon").hide();
                if(payType == "0"){// 线下付款
                    $("#xxzfCon").show();
                }else{ //支付宝、微信、paypal
                    api("pcpay", {
                        "equipmentType": "PC", "lang": localStorage.getItem("lang"), "ubh": localStorage.getItem("ubh"), "order_id": orderid,"pay_type":payType
                    }, function () {
                        loading({ Des: "加载中" });
                    }, function (data) {    
                        window.location.href = data.detail.url + '?' + data.detail.key;
    
                        loading({ Des: "" });
                    }, function (error) {
                        //noneBtnOMsg({ Des: error.responseJSON.Message });
                        loading({ Des: "" });
                    });

                }

            });
public class pcpayController : ApiController
    {
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        [HttpPost]
        [CustomActionFilter]
        //[CustomExcepFilter]
        // POST api/<controller>
        public ApiResult Post(ApiRequest body)
        {
            List<NotEmpty> temp = new List<NotEmpty>()
            {
                new NotEmpty(){ value = body.order_id,err = "order_id参数不能为空"},
                new NotEmpty(){ value = body.pay_type,err = "pay_type参数不能为空"}
            };
            yzin.isEmpty(temp);

            string lang = yzin.getStr(body.lang);
            string equipmentType = yzin.getStr(body.equipmentType);
            string order_id = yzin.getStr(body.order_id);
            string pay_type = yzin.getStr(body.pay_type);

            Hashtable jg = new Hashtable();
            connection con = new connection();

            DataTable dt1 = new DataTable();
            dt1 = con.ExeSql("select fid,bh,money from orders where id=" + order_id + " and zt=1 and del=0");
            if (dt1.Rows.Count <= 0)
            {
                throw new Exception("该订单不存在");
            }

            string url = "", key = "order_id=" + order_id + "&lang=" + lang;
            if (pay_type == "1")
            {
                url = "https://buyexpo.wangjp.com/alipay.aspx";//支付宝
            }
            else if (pay_type == "2")
            {
                url = "https://buyexpo.wangjp.com/wechatPay.aspx";//微信
            }
            else if (pay_type == "3")
            {
                url = "https://buyexpo.wangjp.com/paypalpay.aspx";//paypal
            }

            jg.Add("url", url);//支付域名url
            jg.Add("key", key);//支付字串

            return ApiResult.ret((int)ApiResult.enum_result.success, string.Empty, yzin.toJsonObj(jg));
        }
    }
public partial class wechatPay : System.Web.UI.Page
    {
        connection con = new connection();
        DataTable dt1;
        DataTable dt2;
        public string senddata = "";
        ProjectLog log = new ProjectLog();

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string order_id = Request.QueryString["order_id"];//订单id
                string lang = Request.QueryString["lang"];//订单语言
                string udevlx = "PC";//手机类型android/ios

                if (order_id != "")
                {
                    dt1 = con.ExeSql("select fid,bh,money from orders where id=" + order_id + " and money>0 and zt=1 and del=0");
                    if (dt1.Rows.Count > 0)
                    {
                        string paymc = "", paybh = dt1.Rows[0]["bh"].ToString(), payjg = (Convert.ToDouble(dt1.Rows[0]["money"].ToString()) * 100).ToString();
                        dt2 = con.ExeSql("select exhibitions.mc,exhibitions.emc,pavilion.mc as pavilion,booth.mc as booth,booth.jg,booth.mj,booth.kk from booth inner join pavilion on pavilion.id=booth.pavid inner join exhibitions on exhibitions.id=pavilion.exhiid and booth.id=" + dt1.Rows[0]["fid"].ToString());
                        if (dt2.Rows.Count > 0)
                        {
                            paymc += translate.content(lang, dt2.Rows[0]["mc"].ToString(), dt2.Rows[0]["emc"].ToString());
                            paymc += " " + dt2.Rows[0]["pavilion"].ToString();
                            paymc += " " + dt2.Rows[0]["booth"].ToString();

                            if (udevlx.ToLower() == "android" || udevlx.ToLower() == "ios")
                            {
                                //senddata = WeChat_Pay.Pay_APP(paybh, paymc, payjg, udevlx);
                            }
                            else if (udevlx.ToLower() == "pc")
                            {
                                senddata = WeChat_Pay.Pay_PC(paybh, paymc, payjg, udevlx);

                                string addr1 = "upload/ewm/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
                                string addr2 = Server.MapPath("upload/ewm/") + DateTime.Now.ToString("yyyy-MM-dd") + "\\";
                                if (!Directory.Exists(addr2)) { Directory.CreateDirectory(addr2); }
                                string ewm0 = DateTime.Now.ToString("yyyyMMddHHmmssfff") + yzin.tu_rnd() + "_1.png";
                                string ewm = DateTime.Now.ToString("yyyyMMddHHmmssfff") + yzin.tu_rnd() + ".png";
                                string nr1 = senddata;//二维码内容

                                QRCodeEncoder qrCodeEncoder1 = new QRCodeEncoder();
                                qrCodeEncoder1.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                                qrCodeEncoder1.QRCodeScale = 16;
                                qrCodeEncoder1.QRCodeVersion = 0;
                                qrCodeEncoder1.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
                                Bitmap image1 = qrCodeEncoder1.Encode(nr1);
                                MemoryStream MStream1 = new MemoryStream();
                                image1.Save(MStream1, System.Drawing.Imaging.ImageFormat.Png);
                                FileStream fs1 = new FileStream(addr2 + ewm0, FileMode.CreateNew, FileAccess.ReadWrite);
                                BinaryWriter bw1 = new BinaryWriter(fs1, UTF8Encoding.UTF8);
                                byte[] by1 = MStream1.ToArray();
                                for (int i = 0; i < MStream1.ToArray().Length; i++)
                                {
                                    bw1.Write(by1[i]);
                                }
                                fs1.Close();

                                //二维码文件添加水印后保存完成
                                BuildWatermark(addr2 + ewm0, Server.MapPath("images/wechat.png"), addr2 + ewm, 5);//5正中央
                                if (File.Exists(addr2 + ewm0))
                                {
                                    File.Delete(addr2 + ewm0);
                                }

                                con.ExeSql("update orders set wechatpay_ewm='" + addr1 + ewm + "' where id=" + order_id);

                                Response.Redirect("web/wechat_paying.aspx?paybh=" + paybh + "&lang=" + lang);
                            }
                            else if (udevlx.ToLower() == "wechat")
                            {
                                //senddata = WeChat_Pay.Pay_WX(paybh, paymc, payjg, udevlx);

                                //Response.Redirect("wx/wx_pay.aspx?data=" + senddata);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        public void BuildWatermark(string rSrcImgPath, string rMarkImgPath, string rDstImgPath, int location)
        {
            //进行水印添加处理--------------------------------------------
            //加载文件
            Image Cover = Image.FromFile(rSrcImgPath);
            //加载水印文件
            //string shuiyin =   "images/watermark.png";
            //System.Drawing.Image water = System.Drawing.Image.FromFile(Request.MapPath(rMarkImgPath));
            Image water = Image.FromFile(rMarkImgPath);

            //创建画布
            Graphics g = Graphics.FromImage(Cover);
            if (location == 1)//左上方
            {
                //在image上绘制水印
                g.DrawImage(water, new Rectangle(0, 0, water.Width, water.Height), 0, 0, water.Width, water.Height, GraphicsUnit.Pixel);
            }
            else if (location == 2)//左下方
            {
                //在image上绘制水印
                g.DrawImage(water, new Rectangle(0, Cover.Height - water.Height, water.Width, water.Height), 0, 0, water.Width, water.Height, GraphicsUnit.Pixel);
            }
            else if (location == 3)//右上方
            {
                //在image上绘制水印
                g.DrawImage(water, new Rectangle(Cover.Width - water.Width, 0, water.Width, water.Height), 0, 0, water.Width, water.Height, GraphicsUnit.Pixel);
            }
            else if (location == 4)//右下方
            {
                //在image上绘制水印
                g.DrawImage(water, new Rectangle(Cover.Width - water.Width, Cover.Height - water.Height, water.Width, water.Height), 0, 0, water.Width, water.Height, GraphicsUnit.Pixel);
            }
            else if (location == 5)//正中间
            {
                //在image上绘制水印
                g.DrawImage(water, new Rectangle((Cover.Width - water.Width) / 2, (Cover.Height - water.Height) / 2, water.Width, water.Height), 0, 0, water.Width, water.Height, GraphicsUnit.Pixel);
            }
            else
            {
                //在image上绘制水印
                g.DrawImage(water, new Rectangle(Cover.Width - water.Width, Cover.Height - water.Height, water.Width, water.Height), 0, 0, water.Width, water.Height, GraphicsUnit.Pixel);
            }
            //释放画布
            g.Dispose();
            //释放水印图片
            water.Dispose();
            Cover.Save(rDstImgPath);//保存打过水印的图片
            Cover.Dispose();
        }
    }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="wechat_paying.aspx.cs" Inherits="schenk_booth_web.web.wechat_paying" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="../js/i18n.js" type="text/javascript"></script>
    <meta charset="utf-8" />
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <title></title>
    <link href="../css/global.css" type="text/css" rel="stylesheet" />
    <style>
        .curbody {
            background: url('../images/bg1.png') no-repeat;
            background-size: 100% auto;
            background-position: center bottom;
            background-attachment: fixed;
        }
    </style>
</head>
<body class="curbody">
    <form id="form1" runat="server">
        <div id="top" class="top">
            <!-- <iframe width="100%" style="height: 60px;" src="top.html" frameborder="no" border="0" marginwidth="0"
            marginheight="0" scrolling="no"></iframe> -->
        </div>
        <div style="margin: 30px auto; width: 1200px;">
            <div style="width: 600px; border-radius: 10px; background: #ffffff; padding: 30px 0; margin-top: 100px;" class="auto tc">
                <p style="font-size: 16px; padding: 20px 0px 0px 0px;"><%=pay_mc %></p>
                <p style="font-size: 18px; color: #DE2520; padding: 20px 0; font-weight: bold;"><%=pay_jg %></p>
                <p><%=pay_ewm %></p>
            </div>
        </div>
        <div style="height: 20px; clear: both;">&nbsp;</div>
        <div id="footer"></div>
        <script src="../js/jquery-3.1.0.min.js" type="text/javascript"></script>
        <script src="../js/jquery-loading.js" type="text/javascript"></script>
        <script src="../js/jquery-mask.js" type="text/javascript"></script>
        <script src="../js/global.js" type="text/javascript"></script>
        <script type="text/javascript">
            var paybh = getQueryVariable("paybh");
            var pay_type = getQueryVariable("paytype");
            // var payzt = "0";
            $(function () {
                // 加载头部和底部
                $("#top").load("top.html");
                $("#footer").load("footer.html");

                $("body").css("height", parseInt($(window).height()) - 100);

                setInterval(function () {
                    // if (payzt == "0") {
                    pay_zt();
                    // }
                }, 3000);

            });

            function pay_zt() {
                $.ajax({
                    type: "POST",
                    url: "https://buyexpo.wangjp.com/api/api/pay_zt",
                    contentType: "application/json;charset=utf-8",
                    dataType: "json",
                    data: JSON.stringify({ 'paybh': paybh }),
                    success: function (data) {
                        if (data.code == "100") {
                            if (data.detail.zt == "1") {
                                location.href = 'myOrder.html?type=0';
                            }
                        }
                    }
                });
            }
        </script>
    </form>
</body>
</html>
public partial class wechat_paying : System.Web.UI.Page
    {
        connection con = new connection();
        DataTable dt1;
        DataTable dt2;
        public string pay_mc = "";
        public string pay_jg = "";
        public string pay_ewm = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            string paybh = Request.QueryString["paybh"];//订单编号
            string lang = Request.QueryString["lang"];//订单语言
            dt1 = con.ExeSql("select fid,money,wechatpay_ewm from orders where bh='" + paybh + "' and zt=1 and del=0");
            if (dt1.Rows.Count > 0)
            {
                dt2 = con.ExeSql("select exhibitions.mc,exhibitions.emc,pavilion.mc as pavilion,booth.mc as booth,booth.jg,booth.mj,booth.kk from booth inner join pavilion on pavilion.id=booth.pavid inner join exhibitions on exhibitions.id=pavilion.exhiid and booth.id=" + dt1.Rows[0]["fid"].ToString());
                if (dt2.Rows.Count > 0)
                {
                    pay_mc = translate.content(lang, dt2.Rows[0]["mc"].ToString(), dt2.Rows[0]["emc"].ToString());
                    pay_mc += " " + dt2.Rows[0]["pavilion"].ToString();
                    pay_mc += " " + dt2.Rows[0]["booth"].ToString();
                    pay_jg = dt1.Rows[0]["money"].ToString() + " 元";
                    pay_ewm = "<img src='../" + dt1.Rows[0]["wechatpay_ewm"].ToString() + "' style='width:300px; margin:5px;' />";
                }
                dt1.Clear();
            }
            dt1.Clear();
        }
    }

 wechat_Return_url在微信官网中配置

public partial class wechat_Return_url : System.Web.UI.Page
    {
        connection con = new connection();
        DataTable dt1;

        protected void Page_Load(object sender, EventArgs e)
        {
            string header = Request.Headers.ToString();//http头
            string header_Serial = Request.Headers["Wechatpay-Serial"].ToString();//http头平台证书序列号
            string header_Nonce = Request.Headers["Wechatpay-Nonce"].ToString();//http头应答随机串
            string header_Timestamp = Request.Headers["Wechatpay-Timestamp"].ToString();//http头应答时间戳
            string header_Signature = Request.Headers["Wechatpay-Signature"].ToString();//http头应答签名
            Stream postData = Request.InputStream;//body
            StreamReader sRead = new StreamReader(postData);
            string postContent = yzin.lr(sRead.ReadToEnd().ToString());

            if (postContent != null && postContent != "" && postContent.IndexOf("{") > -1)
            {
                con.ExeSql("insert into tmp (x1,x2,x3,x4,x5,x6,x7,x8)values('微信支付回调','" + DateTime.Now.ToString() + "','" + postContent + "','" + header + "','" + header_Serial + "','" + header_Nonce + "','" + header_Timestamp + "','" + header_Signature + "')");

                JObject obj1 = JObject.Parse(postContent);
                string jg = WeChat_Pay.AesGcmDecrypt(obj1["resource"]["associated_data"].ToString(), obj1["resource"]["nonce"].ToString(), obj1["resource"]["ciphertext"].ToString());
                con.ExeSql("insert into tmp (x1,x2,x3,x4)values('微信支付回调解密','" + DateTime.Now.ToString() + "','" + postContent + "','" + jg + "')");

                JObject obj2 = JObject.Parse(jg);
                if (obj2["trade_state"].ToString() == "SUCCESS")
                {
                    dt1 = con.ExeSql("select id from orders where bh='" + obj2["out_trade_no"].ToString() + "' and zt=1 and del=0");
                    if (dt1.Rows.Count > 0)
                    {
                        con.ExeSql("update orders set num='" + obj2["transaction_id"].ToString() + "',paytime='" + Convert.ToDateTime(obj2["success_time"].ToString()).ToString() + "',pay_openid='" + obj2["payer"]["openid"].ToString() + "',zt='2' where id=" + dt1.Rows[0]["id"].ToString());

                        pay_success.fin(obj2["out_trade_no"].ToString());
                    }
                    dt1.Clear();
                }
                else
                {
                    //con.ExeSql("update exhi_com_srv set alipay='" + obj2["transaction_id"].ToString() + "',pay_platform='" + obj2["trade_type"].ToString() + "',bank_type='" + obj2["bank_type"].ToString() + "',pay_openid='" + obj2["payer"]["openid"].ToString() + "',paysj='" + Convert.ToDateTime(obj2["success_time"].ToString()).ToString() + "',zt='2' where number='" + obj2["out_trade_no"].ToString() + "' and zt=0 and del=0");
                }
            }
        }
    }

接口方式开发

alipay

wechatpay

pay_zt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值