党费收缴管理系统(五) C# 企业微信支付调用

看官方文档非常重要!!!文档地址如下:

文档 - 企业微信开发者中心 (qq.com)

有两个地方特别要注意:

一、企业微信内部收款需要注意将userid和openID做个转换

请求方式:POST(HTTPS
请求地址: https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token=ACCESS_TOKEN

请求示例:

{
   "userid": "zhangsan"
}

参数说明:

参数必须说明
access_token调用接口凭证
userid企业内的成员id

权限说明:
成员必须处于应用的可见范围内

二、需要添加JS-SDK权限验证

添加JSAPI的权限验证
在网页里通过JSAPI的方式发起支付出于安全因素需要对调用方的身份进行验证,所以开发者需要在页面上添加getBrandWCPayRequest接口的权限验证,验证方式如下:

wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来
        appId: 'appId', // 必填,企业微信的corpID
        timestamp: 'timestamp', // 必填,生成签名的时间戳
        nonceStr: 'noncestr', // 必填,生成签名的随机串
        signature: 'signature',// 必填,签名
        jsApiList: ['getBrandWCPayRequest']
});
此处的验证方式和微信公众平台的网页开发签名算法一致,更多关于JSAPI签名算法的完整流程,请参考文档 :JS-SDK签名算法

JS-SDK - 文档 - 企业微信开发者中心 (qq.com)

对于如何进行算法签名按照文档里面的内容一步步操作即可:

1. 获取jsapi_ticket

请求URL:https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=ACCESS_TOKEN

注意:ticket 需要做一个缓存,他的有效期是7200秒,不能过于频繁调用,我自己是将他存到服务器本地文件中将数据保存为json格式

{
    "ticket":####,
    "recTime":22222222
}

每次获取ticket先读取这儿文件,recTime内容为上一次写入的时间戳,进行判断,如果跟现在的时间差超过7200,那么重新从腾讯接口去拉取更新的ticket,并写入到文件。实际过程我设置的时间差判断为7000就好了。

2. 签名生成规则如下:
参与签名的参数有四个: noncestr(随机字符串), jsapi_ticket, timestamp(时间戳), url(当前网页的URL, 不包含#及其后面部分

将这些参数使用URL键值对的格式 (即 key1=value1&key2=value2…)拼接成字符串string1。
有两个注意点:1. 字段值采用原始值,不要进行URL转义;2. 必须严格按照如下格式拼接,不可变动字段顺序。

jsapi_ticket=JSAPITICKET&noncestr=NONCESTR&timestamp=TIMESTAMP&url=URL

然后对string1作sha1加密即可。

务必注意大小写的正确,大小写不对也会导致最后的签名不正确

我在这里就调试了半天,我的调用页面url 为  /home/Index  敲代码的时候写成了  /home/index 结果就是折腾到了晚上12点。签名的代码网上找的,有些代码说用System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile  但这个是已经过时了。最后找的方法如下

public static getShaRes(string s){    
 SHA1 sha1 = new SHA1CryptoServiceProvider();
 byte[] bytes_in = System.Text.Encoding.UTF8.GetBytes(s);
 byte[] bytes_out = sha1.ComputeHash(bytes_in);
 sha1.Dispose();
 string result = BitConverter.ToString(bytes_out);
 return result.Replace("-", "").ToLower();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT大灰狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值