wxPayController.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. 'use strict';
  2. const Controller = require('egg').Controller;
  3. const wxPayUtil = require('../util/wxPayUtil');
  4. const xml2js = require('xml2js'); // 引入xml解析模块
  5. const appId = 'wx1c015df104db7030'; // 小程序的appid
  6. const mchId = '1226156302'; // 商户号
  7. // const mchKey = 'zaq12wsxcde34rfvbgt56yhnmjuioplk'; // 商户秘钥
  8. class WxPayController extends Controller {
  9. // 小程序提现
  10. async promotion() {
  11. const { ctx } = this;
  12. const query = ctx.request.body;
  13. const { openid, money, desc } = query;
  14. let responseData = {};// 请求返回结果
  15. // const openId = 'oqqAL4xGxKX1U81gwK3SCqleaE7k'; // 提现用户openid 7771920101001 用户的小程序openid
  16. // const money = 1; // 企业付款金额,单位为分
  17. // const desc = '积分核销'; // 企业付款备注,必填
  18. const amount = Number(money) * 100;// 提现的金额(单位:分)
  19. const orderId = wxPayUtil.getOrderID(); // 商户订单号
  20. const nonceStr = wxPayUtil.getRandomStr(32);// 生成随机字符串
  21. const signObj = {
  22. mch_appid: appId, // 小程序appid
  23. mchid: mchId, // 商户号
  24. nonce_str: nonceStr, // 随机字符串
  25. partner_trade_no: orderId, // 商品订单号
  26. openid, // 提现用户openid
  27. check_name: 'NO_CHECK', // 是否校验提现人姓名
  28. // re_user_name:'老王',//提现人姓名
  29. amount, // 提现金额
  30. desc, // 商品描述
  31. spbill_create_ip: '39.105.97.139', // 服务器地址
  32. };
  33. signObj.sign = wxPayUtil.getSignParam(signObj);// 将参数拼接,并进行MD5加密,生成sign值
  34. const formData = wxPayUtil.getXmlParam(signObj);
  35. try {
  36. const payResult = await wxPayUtil.WeApiPromotion(formData);
  37. xml2js.parseString(payResult, function(error, result) {
  38. const reData = result.xml;
  39. ctx.logger.info('返回结果解析====================>' + JSON.stringify(reData));
  40. if (reData.return_code[0] === 'SUCCESS') {
  41. responseData = {
  42. data: reData,
  43. };
  44. } else {
  45. responseData = {
  46. wxReturnMsg: '微信提现API失败',
  47. wxReturnCode: 'FAIL',
  48. };
  49. }
  50. });
  51. // try {
  52. ctx.success(responseData);
  53. } catch (err) {
  54. ctx.error('微信提现失败', 500);
  55. }
  56. }
  57. }
  58. module.exports = WxPayController;