在上篇随笔后,经过对整个微信框架的完善和重构,已经完成了对微信支付、企业付款、现金红包、代金券及各种卡劵进行了封装完成,并把其中微信支付及摇一摇红包部分等内容作为公众号和企业号通用的部分,这些支付相关的接口在公众号和企业号里面,都可以进行调用的,在经过一系列的优化整理后,把这些内容逐一进行介绍,希望大家喜欢支持。

1、现金红包的概念及使用

1)使用场景

微信支付现金红包向微信支付商户开发,具体能力如下:

◆ 商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景

◆ 领取到红包后,用户的资金直接进入微信零钱,避免繁复的领奖流程,带给用户微信支付原生的流畅体验

2)微信红包发送规则

发送频率规则

◆ 每分钟发送红包数量不得超过1800个;

◆ 同一个商户号,每分钟最多给同一个用户发送一个红包;

红包规则

◆ 单个红包金额介于[1.00元,200.00元]之间;

◆ 同一个红包只能发送给一个用户;(如果以上规则不满足您的需求,请发邮件至wxhongbao@tencent.com获取升级指引)

◆ 红包发放后72小时未被领取将进行退款

3) 微信红包接口调用流程

◆ 后台API调用:待进入联调过程时与开发进行详细沟通;

◆ 告知服务器:告知服务器接收微信红包的用户openID,告知服务器该用户获得的金额;

◆ 从商务号扣款:服务器获取信息后从对应的商务号扣取对应的金额;

◆ 调用失败:因不符合发送规则,商务号余额不足等原因造成调用失败,反馈至调用方;

◆ 发送成功:以微信红包公众账号发送对应红包至对应用户;

2、 现金红包API接口的说明及C#的封装

用于企业向微信用户个人发现金红包,目前支持向指定微信用户的openid发放指定金额红包。

虽然可以通过微信的商户后台进行现金红包的发放,但我们也可以利用微信提供的接口API进行现金红包的发送。

接口调用请求说明

请求Urlhttps://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack

是否需要证书是(证书及使用说明详见商户证书)

请求方式POST

请求参数

字段名字段必填示例值类型说明

随机字符串nonce_str是5K8264ILTKCH16CQ2502SI8ZNMTM67VSString(32)随机字符串,不长于32位

签名sign是C380BEC2BFD727A4B6845133519F3AD6String(32)详见签名生成算法

商户订单号mch_billno是10000098201411111234567890String(28)商户订单号(每个订单号必须唯一)

组成:mch_id+yyyymmdd+10位一天内不能重复的数字。

接口根据商户订单号支持重入,如出现超时可再调用。

商户号mch_id是10000098String(32)微信支付分配的商户号

公众账号appidwxappid是wx8888888888888888String(32)微信分配的公众账号ID(企业号corpid即为此appId)。接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。

商户名称send_name是天虹百货String(32)红包发送者名称

用户openidre_openid是oxTWIuGaIt6gTKsQRLau2M0yL16EString(32)接受红包的用户

用户在wxappid下的openid

付款金额total_amount是1000int付款金额,单位分

红包发放总人数total_num是1int红包发放总人数

total_num=1

红包祝福语wishing是感谢您参加猜灯谜活动,祝您元宵节快乐!String(128)红包祝福语

Ip地址client_ip是192.168.0.1String(15)调用接口的机器Ip地址

活动名称act_name是猜灯谜抢红包活动String(32)活动名称

备注remark是猜越多得越多,快来抢!String(256)备注信息

数据示例:

上面是接口及输入参数的说明,一般情况下,我们需要根据这些来决定如何实现C#代码的封装,首先我们来定义我们需要的接口和类,如下所示。

通过分析上面的接口说明,我们可以发现,其中接口有部分是固定的常规参数,也就是一般公众号或者企业号的身份信息,有部分是业务参数,因此我们把它们分别分离出来,这样有利于我们对接口的封装和使用,那些常规的参数我们通过公众号身份获取就可以了,业务信息,我们可以定义一个实体类来进行数据的存储交换即可。

对应上图的固定的常规参数,在接口说明中如下所示。

因此,这些信息我们从账号里面设置及获取即可,我们可以在管理后台对它们进行配置,然后在代码逻辑里面取出来使用即可。

根据上面的介绍,我们可以定义红包接口代码如下所示。

///

/// 微信红包(摇一摇红包)操作API

///

public interface ILotteryApi

{

///

/// 用于企业向微信用户个人发现金红包。需要商户证书

/// 目前支持向指定微信用户的openid发放指定金额红包。

///

///

SendRedPackResult SendRedPack(SendRedPackJson json);

其中的 SendRedPackJson 是我们变化的业务参数,我们定义了一个类来进行信息的承载,方便想接口传递信息。

///

/// 现金红包和裂变红包的基础信息

///

public class BaseRedPackJson

{

///

/// 接受红包的用户

/// 用户openid

///

public string re_openid { get; set; }

///

/// 付款金额,单位分

///

public int total_amount { get; set; }

///

/// 红包发放总人数

///

public int total_num { get; set; }

///

/// 红包祝福语

///

public string wishing { get; set; }

///

/// 活动名称

///

public string act_name { get; set; }

///

/// 备注信息

///

public string remark { get; set; }

}

///

/// 发送红包的数据信息

///

public class SendRedPackJson :BaseRedPackJson

{

///

/// 调用接口的机器Ip地址

///

public string client_ip { get; set; }

public SendRedPackJson()

{

this.total_num = 1;//红包发放总人数

}

}

根据上面参数的定义,我们在现金红包的接口实现里面,具体代码如下所示,里面的逻辑内容,主要就是传入常规参数和业务参数两部分,然后调用接口的地址进行数据的提交(POST),获取返回结果并进行解析即可。

///

/// 用于企业向微信用户个人发现金红包。需要商户证书

/// 目前支持向指定微信用户的openid发放指定金额红包。

///

///

public SendRedPackResult SendRedPack(SendRedPackJson json)

{

CheckAccount();//检查AccountInfo的对象属性值

//加入常规的参数

WxPayData data = new WxPayData();

data.SetValue("wxappid", AccountInfo.UniteAppId);//公众账号appid

data.SetValue("mch_id", AccountInfo.MchID);//商户号

data.SetValue("nonce_str", data.GenerateNonceStr());//随机字符串

data.SetValue("send_name", AccountInfo.Name);// 红包发送者名称

//商户订单号(每个订单号必须唯一) 组成:mch_id+yyyymmdd+10位一天内不能重复的数字。

//接口根据商户订单号支持重入,如出现超时可再调用。

data.SetValue("mch_billno", data.GenerateOutTradeNo(AccountInfo.MchID));

data.SetValue("re_openid", json.re_openid);

data.SetValue("total_amount", json.total_amount);

data.SetValue("total_num", json.total_num);

data.SetValue("wishing", json.wishing);

data.SetValue("client_ip", json.client_ip);

data.SetValue("act_name", json.act_name);

data.SetValue("remark", json.remark);

data.SetValue("sign", data.MakeSign(AccountInfo.PayAPIKey));//最后生成签名

var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";

return Helper.GetPayResultWithCert(data, url, AccountInfo.CertPath, AccountInfo.CertPassword);

}

其中发送红包操作是需要证书的,因此需要添加对应的证书,证书是从微信的商户平台上进行下载的。

在商户后台的【API安全】项目上下载证书供我们开发环境使用。

下载证书后,在Windows环境,我们一般需要双击安装,输入所需的商户号作为密码即可。

在代码里面,我们可以使用证书类进行添加

HttpHelper helper = new HttpHelper();

helper.ClientCertificates = new X509CertificateCollection();

certPath = Path.Combine(System.Environment.CurrentDirectory, certPath);

helper.ClientCertificates.Add(new X509Certificate2(certPath, certPassword));

string response = helper.GetHtml(url, xml, true);

3、微信红包的使用结果

例如,我们在测试例子里面调用代码如下所示。

//现金红包

SendRedPackJson packJson = new SendRedPackJson()

{

act_name = "恭喜发财",

client_ip = NetworkUtil.GetIPAddress(),

remark = "企业红包",

wishing = "企业红包",

total_amount = 100,

total_num = 1,

re_openid = tosendOpenId //发送给用户的OpenID

};

var result = hbApi.SendRedPack(packJson);

var message = string.Format("企业发送红包:{0} {1}", result.Success ? "成功" : "失败", result.Message);

Console.WriteLine(message);

Console.WriteLine(result.ToJson());

其中的hbApi是上面接口的构造,如下代码所示。

AccountInfo accountInfo = new AccountInfo()

{

Name = this.SendName,

AppID = this.AppId,

AppSecret = this.AppSecret,

MchID = this.MchID,

PayAPIKey = this.PayAPIKey,

CertPath = this.CertPath,

CertPassword = this.CertPassword,

PayNotifyUrl = this.PayNotifyUrl

};

ILotteryApi hbApi = new LotteryApi(accountInfo);

成功调用后,我们可以在公众号的对话里面看到红包的信息结果,如下是整个红包发送及拆开的过程。

更多C#开发微信门户及应用微信现金红包的封装及使用 相关文章请关注PHP中文网!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

新年签通用php,C#开发微信门户及应用微信现金红包的封装及使用相关推荐

  1. 新年签通用php,《转帖》个人制作 猎人TMW字符串 三系整合通用 新年快乐帖

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 接上面 ^SEnabled^B ^SConditions^T ^N1^T ^SType^SCOMBAT ^t^Sn^N1 ^t^SCooldownChec ...

  2. C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器

    原文:C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器 微信公众号(包括服务号和订阅号)都可以对菜单进行自定义设置,我们为了方便管理,一般先把菜单数据在本地管理维护,需要更新的时候,把 ...

  3. C#开发微信门户及应用(5)--用户分组信息管理

    在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继续写这个系列的博客了,并不是对这个方面停止了研究,而是继续深入探索这方面的技术,为了更好的应用起 ...

  4. C#开发微信门户及应用(32)--微信支付接入和API封装使用

    C#开发微信门户及应用(32)--微信支付接入和API封装使用 在微信的应用上,微信支付是一个比较有用的部分,但也是比较复杂的技术要点,在微商大行其道的年代,自己的商店没有增加微信支付好像也说不过去, ...

  5. (转)C#开发微信门户及应用(5)--用户分组信息管理

    http://www.cnblogs.com/wuhuacong/p/3695351.html 在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继 ...

  6. (转)C#开发微信门户及应用(3)--文本消息和图文消息的应答

    http://www.cnblogs.com/wuhuacong/p/3622636.html 微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习 ...

  7. C#开发微信门户及应用(46)-基于Bootstrap的微信门户应用管理系统功能介绍

    在前面介绍很多的微信框架,基本上都采用EasyUI的界面来搭建的微信框架,如随笔<C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍>介绍的一样,不过随着微信的H5应用越来越多,因 ...

  8. C#开发微信门户及应用(24)-微信小店货架信息管理

    在前面微信小店系列篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及<C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试& ...

  9. C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

    在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用 ...

最新文章

  1. Linux普通用户启动tomcat
  2. 如何使用puttygen基于pem文件生成可供登录的ppk文件
  3. 我10年来的学习和生活
  4. 机器学习算法(5)——决策树(ID3、C4.5、CART)
  5. PAT1103 Integer Factorization (30)(DFS:回溯)
  6. 在logback、log4j等日志输出工具中输出java异常调用堆栈
  7. 标准地形图制作系列--接图表的制作方法
  8. redis核心面试题
  9. can总线配置读入是什么意思_CAN总线(一)
  10. 遍历Map集合的4种常用方法
  11. 微信小程序分享至朋友圈
  12. python点到直线的距离_点到直线距离公式的几种推导
  13. U盘格式化,教你如何将U盘格式化后速度变的更快
  14. java从键盘上输入一位整数_当输入1到7时_从键盘上输入一位整数,当输入1~7时,显示对应的英文星期名称的缩写。...
  15. 【FPGA混沌】基于FPGA的混沌系统verilog实现
  16. 阿里云acp报名了可以退吗?阿里云acp认证所需具备的知识
  17. Harbor开源项目有奖征文活动开启
  18. 树莓派摄像头检测到人物动作
  19. Xilinx芯片存储介绍
  20. 金庸小说数据化中的部分题目答案

热门文章

  1. 上海域格NB模块主推型号介绍
  2. java 正则 排除_Java正则表达式:排除单词/字符串
  3. DL4J中文文档/开始/Eclipse DL4J示例之旅
  4. Kubernetes网络技术解析之Pod基于路由模式的通信实现
  5. 新书介绍 -- 《Redis核心原理与实践》
  6. 基于web的家电维修系统/家电维修管理系统
  7. 人工智能辅助药物发现(3)药物从头设计
  8. c语言游戏泡泡糖,泡泡糖语言教案
  9. 傅里叶变换 一维离散傅里叶变换
  10. 有限元计算 求解笔记(中)