企业微信-企业支付开发

一、开发前准备

  1)企业微信

  2)商户号(微信支付商户平台账号)

  3)wx-pay SDK,  JSSDK

二、开发前了解开发文档,以及相关概念。

  官方文档地址:https://work.weixin.qq.com/api/doc#90000/90135/90280。

  先来了解企业支付需要的一些相关概念:

  1、corpid:每个企业都拥有唯一的corpid,获取此信息可在管理后台"我的企业" - "企业信息"下查看"企业ID"(需要有管理员权限)。

  2、userid:每个成员都有唯一的userid,即所谓的"账号"。在管理后台->"通讯录"->点进某个成员的详情页,可以看到。

  3、agentid:每个应用都有唯一的agentid。在管理后台->"应用与小程序"->"应用",点进某个应用,即可以看到agentid。

  4、secret:secret是企业应用里面用于报障数据安全的"钥匙",每个应用都有一个独立的访问密钥,为了保证数据的安全,secret不能泄露。

  5、access_token:access_token是企业后台去企业微信的后台获取信息时的重要票据,由corpid和secret产生。所有接口在通信时都要携带此信息用于验证接口的访问权限。

  企业支付分为:企业红包、向员工付款、向员工收款三类。如下图所示,此次主要详说向员工收款。

                      企业微信-企业支付开发

  按文档介绍,第一步,开通企业微信专区。第二步,获取用户openid。第三步,添加JSAPI的权限验证。第四步,发起向员工收款。第五步,调用支付JSAPI完成支付。

  第一步就不讲了,因为我没有企业微信管理员账号,都是让人给配置好了,我再用的。

  将上面的步骤文字转换为图来看 ,过程就比较清晰明了了。(如下图)

          企业微信-企业支付开发

  1)首先获取access_token。

  请求方式: GET(HTTPS)
  请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

  需要两个参数,corpid和corpsecret,就是前面的概念介绍的企业id和应用id。获取到的access_token有效时间为7200秒即两小时,因为获取access_token的接口有访问次数限制,所以我们需要把获

取到的access_token缓存起来。这个access_token是我们访问其他接口要用到的。(注意access_token可能会提前失效,逻辑中要判断失效重新调接口获取)。

  2)获取用户openid

  在H5页面上发起向员工收款,需要获取到用户的openid信息,但在企业微信上我们没有直接获取openid的API,需要先获取到userid,再通过userid转换为openid。获取useid需要构造网页授权链接,

通过链接获取code参数,再通过code参数获取用户userid信息。

  2.1)构造网页授权地址https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

  这里的参数如下图说明:

        企业微信-企业支付开发

  这里state是选填的,但是一般还是带上,企业微信会原样返回你给的参数,可以拿这个区分自己是通过哪个方法去请求网页授权的。redirect_uri需要用urlencode处理。构造好网页授权地址后,访问后,页面会跳转到redirect_uri给的地址,并带上code和原样返回的state参数。拿到code后我们就可以用code获取userid了。(注意:code只有5分钟的有效期,并且只能使用一次)

  2.2)获取访问用户身份

  请求方式:GET(HTTPS)
  请求地址:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE

  这里两个参数access_token和code就是前两步我们获取到的。

  权限说明:跳转的域名须完全匹配access_token对应应用的可信域名,否则会返回50001错误。(这个是在第一步,开通企业微信专区那儿设置的)

  请求之后,就会返回用户身份信息了,里面包含userid。返回数据格式:{"errcode": 0,"errmsg": "ok","UserId":"USERID","DeviceId":"DEVICEID"}

  2.3)userid转换为openid

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

  这里需要两个参数一个是access_token放在url地址里,另一个是userid。userid不能拼接在地址后面,需要放到body里面并且是json格式。提供一个方法来进行post请求。

企业微信-企业支付开发
 1 public static JSONObject doJsonPost(String url, JSONObject jsonObject) {
 2         HttpClient client = HttpClientBuilder.create().build();
 3         HttpPost post = new HttpPost(url);
 4         JSONObject response = null;
 5 
 6         try {
 7             StringEntity s = new StringEntity(jsonObject.toString());
 8             s.setContentEncoding("UTF-8");
 9             s.setContentType("application/json");
10             post.setEntity(s);
11             HttpResponse res = client.execute(post);
12             if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
13                 HttpEntity entity = res.getEntity();
14                 String result = EntityUtils.toString(entity);
15                 response = JSONObject.parseObject(result);
16             }
17         } catch (Exception e) {
18             throw new RuntimeException(e);
19         }
20         return response;
21     }
View Code

   请求成功返回一个JSONObject{"errcode": 0,"errmsg": "ok","openid": "oDOGms-6yCnGrRovBj2yHij5JL6E"},里面包含 openid信息。

  3)添加JSAPI权限验证

  拿到openid后,就差不多完成了发起支付的前期准备条件,不过调用JSAPI支付之前,需要对请求的JSAPI进行权限验证。在调用JSAPI的页面引入jssdk,地址为https://res2.wx.qq.com/open/js/jweixin-1.4.0.js

    wx.config({
          debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来
          appId: ‘appId‘, // 必填,企业微信的corpID
          timestamp: ‘timestamp‘, // 必填,生成签名的时间戳
          nonceStr: ‘noncestr‘, // 必填,生成签名的随机串
          signature: ‘signature‘,// 必填,签名
          jsApiList: [‘getBrandWCPayRequest‘]
    });

 

企业微信-企业支付开发

上一篇:node.js解析微信消息推送xml格式加密的消息


下一篇:微信公众号token验证失败