微信支付有几种支付模式:刷卡支付扫码支付公众号支付APP支付。本文介绍用于在微信商城里的公众号支付。

1. 效果图

在商城里购买商品后,到支付页面:

点击上面的确认支付,转到下面微信支付页面:

可关注微信号 webuscn 或扫描下面二维码,进入微商城体验:

作者:疯吻IT 出处:http://fengwenit.cnblogs.com

2. 申请微信支付

申请成为公众账号支付商户需要满足以下条件:

1、拥有公众帐号,且为服务号、企业号;

2、公众帐号须通过微信认证;(未认证用户,可先申请微信认证)

3、政府、媒体两大类型的订阅号支持申请微信支付(点此了解更多)。

4、企业号也支持申请微信支付,请在企业号管理平台发起申请。

温馨提示:

1、微信支付商户申请无开通费用及保证金;

2、微信认证资质审核通过后,即可申请微信支付功能;

3、订阅号可先升级为服务号,升级方法点击这里了解。

详细步骤请参考官方文档:

http://kf.qq.com/faq/140225MveaUz150107UVFNjy.html

3.  实现

3.1 配置

首先要配置支付授权目录:

在你的微商城系统里配置商户信息:

3.2 前台代码

这个页面就是上面配置的支付授权目录下面的页面。

先定义一个支付按钮:

<a href="javascript:void(0);" class="btn" id="getBrandWCPayRequest">确认支付</a>

当微信内置浏览器完成内部初始化后会触发WeixinJSBridgeReady事件:

        document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {

            //公众号支付

            jQuery('a#getBrandWCPayRequest').click(function (e) {

             

                WeixinJSBridge.invoke('getBrandWCPayRequest', {

                   <%=packageValue%>

                }, function (res) {

                    var newurl = "/api/payment/wxpay/payResult.aspx?wid=" + <%=wid%> + "&otid=" + '<%=otid_str%>' + "&openid=" + '<%=openid%>' + "";

                    if (res.err_msg == "get_brand_wcpay_request:ok") {

                        //支付成功后清空我的订单

                        $.post("/shop/shopmgr.ashx?myact=clearMyOrder", { wid: '<%=wid%>', openid: '<%=openid%>' }, function (data) { }, "json")

 

                        alert("微信支付成功,点击右上角返回!");

                        window.location.href = newurl;

                    } else if (res.err_msg == "get_brand_wcpay_request:cancel") {

                        alert("您取消了支付!");

                    } else {

                        alert(res.err_msg);

                        alert("您支付失败了!");

                    }

                });

 

            });

 

            WeixinJSBridge.log('yo~ ready.');

 

        }, false);

使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
因此微信团队建议,当收到ok返回时,向商户后台询问是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此时未收到通知,商户后台主动调用查询订单接口,查询订单的当前状态,并反馈给前端展示相应的界面。

网页端接口参数详细列表:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7

3.3 后台代码

主要是生成前台所需要的 packageValue :

//先设置基本信息

           string MchId = paymentInfo.partnerId; // "1218574001";//  

 

           string partnerKey = paymentInfo.partnerKey;// 商户支付密钥Key。登录微信商户后台,进入栏目【账户设置】【密码安全】【API 安全】【API 密钥】

 

           string notify_url = "http://" + HttpContext.Current.Request.Url.Authority + "/api/payment/wxpay/notify_url.aspx";

 

 

           string timeStamp = "";

           string nonceStr = "";

           string paySign = "";

 

           string sp_billno = out_trade_no;

           //当前时间 yyyyMMdd

           string date = DateTime.Now.ToString("yyyyMMdd");

 

           if (null == sp_billno)

           {

               //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一

               sp_billno = DateTime.Now.ToString("HHmmss") + TenPayV3Util.BuildRandomStr(28);

           }

 

 

           //创建支付应答对象

           Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);

           //初始化

           packageReqHandler.Init();

           //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/);

 

           timeStamp = TenPayV3Util.GetTimestamp();

           nonceStr = TenPayV3Util.GetNoncestr();

 

           //设置package订单参数

           packageReqHandler.SetParameter("appid", uwEntity.AppId);          //公众账号ID

           packageReqHandler.SetParameter("mch_id", MchId);          //商户号

           packageReqHandler.SetParameter("nonce_str", nonceStr);                    //随机字符串

           packageReqHandler.SetParameter("body", busiBody);  //商品描述

           packageReqHandler.SetParameter("attach", wid + "|" + busiBody);

           packageReqHandler.SetParameter("out_trade_no", sp_billno);        //商家订单号

           packageReqHandler.SetParameter("total_fee", ((int)(ttFee * 100)).ToString());                    //商品金额,以分为单位(money * 100).ToString()

           packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress);   //用户的公网ip,不是商户服务器IP

           packageReqHandler.SetParameter("notify_url", notify_url);            //接收财付通通知的URL

           packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString());//交易类型

           packageReqHandler.SetParameter("openid", openid);                        //用户的openId

 

           string sign = packageReqHandler.CreateMd5Sign("key", partnerKey);

           packageReqHandler.SetParameter("sign", sign);                        //签名

 

           string data = packageReqHandler.ParseXML();

    

           var result = TenPayV3.Unifiedorder(data);

 

           var res = XDocument.Parse(result);

           prepayId = res.Element("xml").Element("prepay_id").Value;

     

           //设置支付参数

           Senparc.Weixin.MP.TenPayLibV3.RequestHandler paySignReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);

           paySignReqHandler.SetParameter("appId", uwEntity.AppId);

           paySignReqHandler.SetParameter("timeStamp", timeStamp);

           paySignReqHandler.SetParameter("nonceStr", nonceStr);

           paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId));

           paySignReqHandler.SetParameter("signType", "MD5");

           paySign = paySignReqHandler.CreateMd5Sign("key", partnerKey);

 

           packageValue = "";

           packageValue += " \"appId\": \"" + uwEntity.AppId + "\", ";

           packageValue += " \"timeStamp\": \"" + timeStamp + "\", ";

           packageValue += " \"nonceStr\": \"" + nonceStr + "\", ";

           packageValue += " \"package\": \"" + string.Format("prepay_id={0}", prepayId) + "\", ";

           packageValue += " \"signType\": \"MD5\", ";

           packageValue += " \"paySign\": \"" + paySign + "\"";

用c#开发微信 系列汇总

用c#开发微信 (22) 微信商城 - 微信支付 (c#源码)的更多相关文章

  1. 微信小程序商城 带java后台源码

    微信小程序商城(Java版) 演示地址 账号:admin 密码:admin 小程序体验码: 技术选型 1 后端使用技术 1.1 springframework4.3.7.RELEASE 1.2 myb ...

  2. c++实现游戏开发中常用的对象池(含源码)

    c++实现游戏开发中常用的对象池(含源码) little_stupid_child2017-01-06上传   对象池的五要素: 1.对象集合 2.未使用对象索引集合 3.已使用对象索引集合 4.当前 ...

  3. C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  4. 微信公众平台开发-微信服务器IP接口实例(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 学习了access_token的获取及应用后,正式的使用access_token ...

  5. Redis秒杀实战-微信抢红包-秒杀库存,附案例源码(Jmeter压测)

    导读 前二天我写了一篇,Redis高级项目实战(点我直达),SpringBoot整合Redis附源码(点我直达),今天我们来做一下Redis秒杀系统的设计.当然啦,Redis基础知识还不过关的,先去加 ...

  6. 微信小程序demo——入门级(附源码)

    最近小程序又蠢蠢欲动,出了一个公众号绑定小程序功能,目测不错,就看了下微信小程序文档,顺便写了几行代码,后续有空会持续更新维护. 源码:https://github.com/SibreiaDante/ ...

  7. 微信小程序实现左滑删除源码

    左滑删除效果在app的交互方式中十分流行,比如全民应用微信 微信左滑删除 再比如曾引起很大反响的效率app Clear Clear左滑删除 从技术上来说,实现这个效果并不困难,响应一下滑动操作,移动一 ...

  8. Java开发简单的家居购物商城系统 JSP 附源码

    开发环境:    Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MYSQL数据库 注意:使用tomcat7运行 运行效果图 源码及原文链接:https://javadao ...

  9. CRMEB单商户商城系统v4.0源码,含前端uni-app源码

    CRMEB商城系统是基于ThinkPhp6.0+Vue开发的一套新零售移动电商系统,CRMEB系统就是集客户关系管理+营销电商系统,能够快速积累客户.会员数据分析.智能转化客户. 有效提高销售.会员维 ...

  10. 【原创】基于NodeJS Express框架开发的一个VIP视频网站项目及源码分享

    项目名称:视频网站项目 开发语言:HTML,CSS(前端),JavaScript,NODEJS(expres)(后台) 数据库:MySQL 开发环境:Win7,Webstorm 上线部署环境:Linu ...

随机推荐

  1. JSP调用JAVA方法小例子

    用JAVA编写的函数 package doc; //定义一个包 public class Dy { //定义一个类 public static int Sub(int x,int y){ //定义函数 ...

  2. Deep Learning(深度学习)学习笔记整理

    申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表 ...

  3. JQuery 公网 CDN

    JQuery 公网 CDN   <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js&quo ...

  4. 第2章 C#中的泛型

    2.1 理解泛型2.1.1 为什么要有泛型 并不一定要使用字符T作为类型参数的名称,也可以使用其他的字符,但习惯上使用T. 2.1.2 类型参数约束什么是“向下的强制转换(downcast)”?因为O ...

  5. 使用Aspose插件将程序中的表格,导出生成excel表格

    http://www.cnblogs.com/lanyue52011/p/3372452.html这个是原文地址 /// <summary> /// 点击按钮,将内存表导出excel表格! ...

  6. C#中不同的线程对控件的更改

    .net 不允许跨线程个性其它线程创建的控件. 要想实现这个功能就需要用 InvokeRequired 检查是不是由该线程创建的控件,如果是直接操作,如果不是则 用Invoke 添加一个委托再加上参数 ...

  7. Odoo10尝鲜: 退货

    Odoo sale / purchase 在 v9 改进之后, 开立发票的入口 不再像之前的版本,有多个来源,例如 订单 交货单 记工单 分析分录     现在只有一个入口,只需要在 订单上开票,这样 ...

  8. 自动化运维工具之ansible(转)

    原文链接:http://os.51cto.com/art/201409/451927_all.htm

  9. Oracle primary,unique,foreign 区别,Hibernate 关联映射

    Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...

  10. win7电脑共享VPN连接教程

    互通网络VPN服务器不限制连接数,如果仅仅是电脑连接的话有点浪费,如何只在笔记本电脑上设置一次VPN,然后手机.平板等都可以直接共享使用呢?为什么需要笔记本电脑,因为笔记本电脑内置的无线网卡可以设置w ...