UNPKG

22.9 kBJavaScriptView Raw
1'use strict';
2
3var path = require('path');
4var fs = require('fs');
5
6var formstream = require('formstream');
7var util = require('./util');
8var wrapper = util.wrapper;
9var postJSON = util.postJSON;
10var make = util.make;
11
12/**
13 * 上传Logo
14 * Examples:
15 * ```
16 * api.uploadLogo('filepath', callback);
17 * ```
18 * Callback:
19 *
20 * - `err`, 调用失败时得到的异常
21 * - `result`, 调用正常时得到的对象
22 *
23 * Result:
24 * ```
25 * {
26 * "errcode":0,
27 * "errmsg":"ok",
28 * "url":"http://mmbiz.qpic.cn/mmbiz/iaL1LJM1mF9aRKPZJkmG8xXhiaHqkKSVMMWeN3hLut7X7hicFNjakmxibMLGWpXrEXB33367o7zHN0CwngnQY7zb7g/0"
29 * }
30 * ```
31 *
32 * @name uploadLogo
33 * @param {String} filepath 文件路径
34 * @param {Function} callback 回调函数
35 */
36make(exports, 'uploadLogo', function (filepath, callback) {
37 var that = this;
38 fs.stat(filepath, function (err, stat) {
39 if (err) {
40 return callback(err);
41 }
42 var form = formstream();
43 form.file('buffer', filepath, path.basename(filepath), stat.size);
44 var url = that.fileServerPrefix + 'media/uploadimg?access_token=' + that.token.accessToken;
45 var opts = {
46 dataType: 'json',
47 type: 'POST',
48 timeout: 60000, // 60秒超时
49 headers: form.headers(),
50 stream: form
51 };
52 that.request(url, opts, wrapper(callback));
53 });
54});
55
56/**
57 * @name addLocations
58 * @param {Array} locations 位置
59 * @param {Function} callback 回调函数
60 */
61make(exports, 'addLocations', function (locations, callback) {
62 var data = {
63 location_list: locations
64 };
65 var url = this.endpoint + '/card/location/batchadd?access_token=' + this.token.accessToken;
66 this.request(url, postJSON(data), wrapper(callback));
67});
68
69make(exports, 'getLocations', function (offset, count, callback) {
70 var data = {
71 offset: offset,
72 count: count
73 };
74 var url = this.endpoint + '/card/location/batchget?access_token=' + this.token.accessToken;
75 this.request(url, postJSON(data), wrapper(callback));
76});
77
78make(exports, 'getColors', function (callback) {
79 var url = this.endpoint + '/card/getcolors?access_token=' + this.token.accessToken;
80 this.request(url, {dataType: 'json'}, wrapper(callback));
81});
82
83make(exports, 'createCard', function (card, callback) {
84 var url = this.endpoint + '/card/create?access_token=' + this.token.accessToken;
85 var data = {card: card};
86 this.request(url, postJSON(data), wrapper(callback));
87});
88
89exports.getRedirectUrl = function (url, encryptCode, cardId) {
90 // TODO
91};
92
93make(exports, 'createQRCode', function (card, callback) {
94 var url = this.endpoint + '/card/qrcode/create?access_token=' + this.token.accessToken;
95 var data = {
96 action_name: 'QR_CARD',
97 action_info: {
98 card: card
99 }
100 };
101 this.request(url, postJSON(data), wrapper(callback));
102});
103
104/**
105 * 创建用于投放的卡卷二维码,支持投放单张卡卷和多张卡卷
106 * Examples:
107 * ```
108 * api.createCardQRCode('info', 'expire_seconds', callback);
109 * ```
110 * Callback:
111 *
112 * - `err`, 调用失败时得到的异常
113 * - `result`, 调用正常时得到的对象
114 *
115 * Result:
116 * ```
117 * {
118 * "errcode": 0,
119 * "errmsg": "ok",
120 * "ticket": "gQHB8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0JIV3lhX3psZmlvSDZmWGVMMTZvAAIEsNnKVQMEIAMAAA==",//获取ticket后需调用换取二维码接口获取二维码图片,详情见字段说明。
121 * "expire_seconds": 1800,
122 * "url": "http://weixin.qq.com/q/BHWya_zlfioH6fXeL16o ",
123 * "show_qrcode_url": " https://mp.weixin.qq.com/cgi-bin/showqrcode? ticket=gQH98DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0czVzRlSWpsamlyM2plWTNKVktvAAIE6SfgVQMEgDPhAQ%3D%3D"
124 * }
125 * ```
126 *
127 * @name createCardQRCode
128 * @param {Object} info 卡卷信息,支持单张和多张模式
129 * 二维码投放单张卡卷
130 * ```
131 * {
132 * "expire_seconds": 1800,
133 * "card": {
134 * "card_id": "pAtUNs1c3cBtMs5KeL8FP1f3fOaE"
135 * }
136 * }
137 * ```
138 * ```
139 * 二维码投放多张卡卷
140 * {
141 * "expire_seconds": 1800,
142 * "multiple_card": {
143 * "card_list": [
144 * {
145 * "card_id": "pAtUNs-HV0evhGTWbU3ohp99tW7k"
146 * },
147 * {
148 * "card_id": "pAtUNs1c3cBtMs5KeL8FP1f3fOaE"
149 * }
150 * ]
151 * }
152 * }
153 * @param {number} expire_seconds 二维码的有效时间,范围是60 ~ 1800秒。不填默认为永久有效。
154 * @param {Function} callback 回调函数
155 */
156make(exports, 'createCardQRCode', function (info, expire_seconds, callback) {
157 if(typeof expire_seconds === 'function') {
158 callback = expire_seconds;
159 expire_seconds = null;
160 }
161 var url = this.endpoint + '/card/qrcode/create?access_token=' + this.token.accessToken;
162 var data = {
163 action_name: 'QR_'+Object.keys(info)[0].toUpperCase(),
164 expire_seconds: expire_seconds,
165 action_info: info
166 };
167 this.request(url, postJSON(data), wrapper(callback));
168});
169
170make(exports, 'consumeCode', function (code, cardId, callback) {
171 var url = this.endpoint + '/card/code/consume?access_token=' + this.token.accessToken;
172 var data = {
173 code: code,
174 card_id: cardId
175 };
176 this.request(url, postJSON(data), wrapper(callback));
177});
178
179make(exports, 'decryptCode', function (encryptCode, callback) {
180 var url = this.endpoint + '/card/code/decrypt?access_token=' + this.token.accessToken;
181 var data = {
182 encrypt_code: encryptCode
183 };
184 this.request(url, postJSON(data), wrapper(callback));
185});
186
187make(exports, 'deleteCard', function (cardId, callback) {
188 var url = this.endpoint + '/card/delete?access_token=' + this.token.accessToken;
189 var data = {
190 card_id: cardId
191 };
192 this.request(url, postJSON(data), wrapper(callback));
193});
194
195make(exports, 'getCode', function (code, cardId, callback) {
196 var url = this.endpoint + '/card/code/get?access_token=' + this.token.accessToken;
197 var data = {
198 code: code
199 };
200 if (typeof cardId !== 'function') {
201 data.card_id = cardId;
202 } else {
203 callback = cardId;
204 }
205 this.request(url, postJSON(data), wrapper(callback));
206});
207
208make(exports, 'getCards', function (offset, count, status_list, callback) {
209 var url = this.endpoint + '/card/batchget?access_token=' + this.token.accessToken;
210 var data = {
211 offset: offset,
212 count: count
213 };
214 if (typeof status_list !== 'function') {
215 data.status_list = status_list;
216 } else {
217 callback = status_list;
218 }
219 this.request(url, postJSON(data), wrapper(callback));
220});
221
222make(exports, 'getCard', function (cardId, callback) {
223 var url = this.endpoint + '/card/get?access_token=' + this.token.accessToken;
224 var data = {
225 card_id: cardId
226 };
227 this.request(url, postJSON(data), wrapper(callback));
228});
229
230make(exports, 'updateCode', function (code, cardId, newcode, callback) {
231 var url = this.endpoint + '/card/code/update?access_token=' + this.token.accessToken;
232 var data = {
233 code: code,
234 card_id: cardId,
235 newcode: newcode
236 };
237 this.request(url, postJSON(data), wrapper(callback));
238});
239
240make(exports, 'unavailableCode', function (code, cardId, callback) {
241 var url = this.endpoint + '/card/code/unavailable?access_token=' + this.token.accessToken;
242 var data = {
243 code: code
244 };
245 if (typeof cardId !== 'function') {
246 data.card_id = cardId;
247 } else {
248 callback = cardId;
249 }
250 this.request(url, postJSON(data), wrapper(callback));
251});
252
253make(exports, 'updateCard', function (cardId, cardType, cardInfo, callback) {
254 var url = this.endpoint + '/card/update?access_token=' + this.token.accessToken;
255 var data = {
256 card_id: cardId
257 };
258 data[cardType.toLowerCase()] = cardInfo;
259 this.request(url, postJSON(data), wrapper(callback));
260});
261
262make(exports, 'updateCardStock', function (cardId, num, callback) {
263 var url = this.endpoint + '/card/modifystock?access_token=' + this.token.accessToken;
264 var data = {
265 card_id: cardId
266 };
267 if (num > 0) {
268 data.increase_stock_value = Math.abs(num);
269 } else {
270 data.reduce_stock_value = Math.abs(num);
271 }
272 this.request(url, postJSON(data), wrapper(callback));
273});
274
275make(exports, 'activateMembercard', function (info, callback) {
276 var url = this.endpoint + '/card/membercard/activate?access_token=' + this.token.accessToken;
277 this.request(url, postJSON(info), wrapper(callback));
278});
279
280/**
281 * 设置开卡字段接口
282 * ```
283 * Examples:
284 * ```
285 * api.activateMembercardUserForm(info, callback);
286 *
287 * ```
288 * Callback:
289 *
290 * - `err`, 调用失败时得到的异常
291 * - `result`, 调用正常时得到的对象
292 *
293 * Result:
294 * ```
295 * {
296 * "errcode":0,
297 * "errmsg":"ok"
298 * }
299 * ```
300 *
301 * @name activateMembercardUserForm
302 * @param {Object} info 参数
303 * @param {Function} callback 回调函数
304 */
305make(exports, 'activateMembercardUserForm', function (info, callback) {
306 var url = this.endpoint + '/card/membercard/activateuserform/set?access_token=' + this.token.accessToken;
307 this.request(url, postJSON(info), wrapper(callback));
308});
309
310make(exports, 'getMembercard', function (info, callback) {
311 var url = this.endpoint + '/card/membercard/userinfo/get?access_token=' + this.token.accessToken;
312 this.request(url, postJSON(info), wrapper(callback));
313});
314
315make(exports, 'updateMembercard', function (info, callback) {
316 var url = this.endpoint + '/card/membercard/updateuser?access_token=' + this.token.accessToken;
317 this.request(url, postJSON(info), wrapper(callback));
318});
319
320make(exports, 'updateMovieTicket', function (info, callback) {
321 var url = this.endpoint + '/card/movieticket/updateuser?access_token=' + this.token.accessToken;
322 this.request(url, postJSON(info), wrapper(callback));
323});
324
325make(exports, 'checkInBoardingPass', function (info, callback) {
326 var url = this.endpoint + '/card/boardingpass/checkin?access_token=' + this.token.accessToken;
327 this.request(url, postJSON(info), wrapper(callback));
328});
329
330make(exports, 'updateLuckyMonkeyBalance', function (code, cardId, balance, callback) {
331 var url = this.endpoint + '/card/luckymonkey/updateuserbalance?access_token=' + this.token.accessToken;
332 var data = {
333 'code': code,
334 'card_id': cardId,
335 'balance': balance
336 };
337 this.request(url, postJSON(data), wrapper(callback));
338});
339
340make(exports, 'updateMeetingTicket', function (info, callback) {
341 var url = this.endpoint + '/card/meetingticket/updateuser?access_token=' + this.token.accessToken;
342 this.request(url, postJSON(info), wrapper(callback));
343});
344
345make(exports, 'setTestWhitelist', function (info, callback) {
346 var url = this.endpoint + '/card/testwhitelist/set?access_token=' + this.token.accessToken;
347 this.request(url, postJSON(info), wrapper(callback));
348});
349
350/**
351 * 导入code接口
352 * 接口说明
353 * 开发者可调用该接口将自定义code导入微信卡券后台,由微信侧代理存储并下发code,本接口仅用于支持自定义code的卡券参与互通。
354 * code:
355 * ```
356 * [
357 * "11111",
358 * "22222",
359 * "33333"
360 * ]
361 * ```
362 * Examples:
363 * ```
364 * api.importCustomizedCodes('cardId', code, callback);
365 *
366 * ```
367 * Callback:
368 *
369 * - `err`, 调用失败时得到的异常
370 * - `result`, 调用正常时得到的对象
371 *
372 * Result:
373 * ```
374 * {
375 * "errcode":0,
376 * "errmsg":"ok"
377 * }
378 * ```
379 *
380 * @name importCustomizedCodes
381 * @param {String} cardId 卡券ID
382 * @param {Array} code 待导入自定义code
383 * @param {Function} callback 回调函数
384 */
385make(exports, 'importCustomizedCodes', function (cardId, code, callback) {
386 var url = this.endpoint + '/card/code/deposit?access_token=' + this.token.accessToken;
387 var data = {
388 'card_id': cardId,
389 'code': code
390 };
391 this.request(url, postJSON(data), wrapper(callback));
392});
393
394/**
395 * 核查code接口
396 * 接口说明
397 * 支持开发者调用该接口查询code导入微信后台的情况。
398 * code:
399 * ```
400 * [
401 * "11111",
402 * "22222",
403 * "33333"
404 * ]
405 * ```
406 * Examples:
407 * ```
408 * api.checkCustomizedCodes('cardId', code, callback);
409 * ```
410 * Callback:
411 *
412 * - `err`, 调用失败时得到的异常
413 * - `result`, 调用正常时得到的对象
414 *
415 * Result:
416 * ```
417 * {
418 * "errcode":0,
419 * "errmsg":"ok",
420 * "exist_code":["11111","22222"],
421 * "not_exist_code":["33333"]
422 * }
423 * ```
424 *
425 * @name checkCustomizedCodes
426 * @param {String} cardId 卡券ID
427 * @param {Array} code 待核查自定义code
428 * @param {Function} callback 回调函数
429 */
430make(exports, 'checkCustomizedCodes', function (cardId, code, callback) {
431 var url = this.endpoint + '/card/code/checkcode?access_token=' + this.token.accessToken;
432 var data = {
433 'card_id': cardId,
434 'code': code
435 };
436 this.request(url, postJSON(data), wrapper(callback));
437});
438
439/**
440 * 查询导入code数目接口
441 * 接口说明
442 * 支持开发者调用该接口查询code导入微信后台成功的数目。
443 * Examples:
444 * ```
445 * api.getDepositCodesCount('cardId', callback);
446 * ```
447 * Callback:
448 *
449 * - `err`, 调用失败时得到的异常
450 * - `result`, 调用正常时得到的对象
451 *
452 * Result:
453 * ```
454 * {
455 * "errcode":0,
456 * "errmsg":"ok",
457 * "count":123
458 * }
459 * ```
460 *
461 * @name getDepositCodesCount
462 * @param {String} cardId 卡券ID
463 * @param {Function} callback 回调函数
464 */
465make(exports, 'getDepositCodesCount', function (cardId, callback) {
466 var url = this.endpoint + '/card/code/getdepositcount?access_token=' + this.token.accessToken;
467 var data = {
468 'card_id': cardId
469 };
470 this.request(url, postJSON(data), wrapper(callback));
471});
472
473/**
474 * 拉取卡券概况数据
475 * @param {String} beginDate 开始时间
476 * @param {String} endDate 结束时间(结束时间不能为当天,不然会报错,可设为昨天)
477 * @param {int} source 卡券来源,0为公众平台创建的卡券数据、1是API创建的卡券数据
478 */
479make(exports, 'getTotalCardDataInfo', function (beginDate, endDate, source, callback) {
480 var url = this.endpoint + '/datacube/getcardbizuininfo?access_token=' + this.token.accessToken;
481 var data = {
482 'begin_date': beginDate,
483 'end_date': endDate,
484 'cond_source': source
485 };
486 this.request(url, postJSON(data), wrapper(callback));
487});
488
489
490/**
491 * 获取免费券数据
492 * @param {String} cardId cardId 卡券ID
493 * @param {String} beginDate 开始时间
494 * @param {String} endDate 结束时间(结束时间不能为当天,不然会报错,可设为昨天)
495 * @param {int} source 卡券来源,0为公众平台创建的卡券数据、1是API创建的卡券数据
496 */
497make(exports, 'getCardDataInfo', function (cardId, beginDate, endDate, source, callback) {
498 var url = this.endpoint + '/datacube/getcardcardinfo?access_token=' + this.token.accessToken;
499 var data = {
500 'begin_date': beginDate,
501 'end_date': endDate,
502 'cond_source': source,
503 'card_id': cardId
504 };
505 this.request(url, postJSON(data), wrapper(callback));
506});
507
508/**
509 * 设置商户的核销员
510 * 接口说明
511 * 开发者需调用该接口设置商户的核销员,并指定核销员的门店。
512 * Examples:
513 * ```
514 * api.addConsumer('username', 'locationId', callback);
515 * ```
516 * Callback:
517 *
518 * - `err`, 调用失败时得到的异常
519 * - `result`, 调用正常时得到的对象
520 *
521 * Result:
522 * ```
523 * {
524 * "errcode":0,
525 * "errmsg":"ok"
526 * }
527 * ```
528 *
529 * @name addConsumer
530 * @param {String} username 店员的微信号,开发者须确认该微信号在设置之前已 经关注”卡券商户助手公众号“
531 * @param {String} locationId 当前核销员关联的门店值
532 * @param {Function} callback 回调函数
533 */
534make(exports, 'addConsumer', function (username, locationId, callback) {
535 var url = this.endpoint + '/card/consumer/add?access_token=' + this.token.accessToken;
536 var data = {
537 'username': username,
538 'is_super_consumer': true
539 };
540 if (locationId) {
541 data.location_id = locationId;
542 data.is_super_consumer = false;
543 }
544 this.request(url, postJSON(data), wrapper(callback));
545});
546
547/**
548 * 卡券开放类目查询接口
549 * 接口说明
550 * 通过调用该接口查询卡券开放的类目ID,类目会随业务发展变更,请每次用接口去查询获取实时卡券类目。
551 * 注意:
552 * 1. 本接口查询的返回值还有卡券资质ID,此处的卡券资质为:已微信认证的公众号通过微信公众平台申请卡券功能时,所需的资质。
553 * 2.对于第三方开发者代制(无公众号)模式,子商户无论选择什么类目,均暂不需按照此返回提供资质,返回值仅参考类目ID 即可。
554 * Examples:
555 * ```
556 * api.getApplyProtocol(callback);
557 * ```
558 * Callback:
559 *
560 * - `err`, 调用失败时得到的异常
561 * - `result`, 调用正常时得到的对象
562 *
563 * Result:
564 * ```
565 * {
566 * "category": [
567 * {
568 * "primary_category_id": 1,
569 * "category_name": "美食",
570 * "secondary_category": [
571 * {
572 * "secondary_category_id": 101,
573 * "category_name": "粤菜",
574 * "need_qualification_stuffs": [
575 * "food_service_license_id",
576 * "food_service_license_bizmedia_id"
577 * ],
578 * "can_choose_prepaid_card": 1,
579 * "can_choose_payment_card": 1
580 * },
581 * }
582 * ],
583 * "errcode":0,
584 * "errmsg":"ok"
585 * }
586 * ```
587 *
588 * @name getApplyProtocol
589 * @param {Object} options 子商户相关资料
590 * @param {Function} callback 回调函数
591 */
592make(exports, 'getApplyProtocol', function (callback) {
593 var url = this.endpoint + '/card/getapplyprotocol?access_token=' + this.token.accessToken;
594 this.request(url, {dataType: 'json'}, wrapper(callback));
595});
596
597/**
598 * 创建子商户接口
599 * 接口说明
600 * 支持母商户调用该接口传入子商户的相关资料,并获取子商户ID,用于子商户的卡券功能管理。
601 * 子商户的资质包括:商户名称、商户logo(图片)、卡券类目、授权函(扫描件或彩照)、授权函有效期截止时间。
602 * Examples:
603 * ```
604 * api.submitSubmerchant(options, callback);
605 * ```
606 * options:
607 * {
608 * "brand_name": "aaaaaa",
609 * "app_id":"xxxxxxxxxxx",
610 * "logo_url": "http://mmbiz.xxxx",
611 * "protocol": "xxxxxxxxxx",
612 * "agreement_media_id":"xxxxxxxxxx",
613 * "operator_media_id":"xxxxxxxx",
614 * "end_time": 1438990559,
615 * "primary_category_id": 1,
616 * "secondary_category_id": 101
617 * }
618 *
619 * Callback:
620 *
621 * - `err`, 调用失败时得到的异常
622 * - `result`, 调用正常时得到的对象
623 *
624 * @name submitSubmerchant
625 * @param {Object} options 子商户相关资料
626 * @param {Function} callback 回调函数
627 */
628make(exports, 'submitSubmerchant', function (options, callback) {
629 var url = this.endpoint + '/card/submerchant/submit?access_token=' + this.token.accessToken;
630 var data = {
631 'info': options
632 };
633 this.request(url, postJSON(data), wrapper(callback));
634});
635
636/**
637 * 更新子商户接口
638 * 接口说明
639 * 支持调用该接口更新子商户信息。
640 * Examples:
641 * ```
642 * api.updateSubmerchant(options, callback);
643 * ```
644 * options:
645 * {
646 * "merchant_id": 12,
647 * "brand_name": "aaaaaa",
648 * "app_id":"xxxxxxxxxxx",
649 * "logo_url": "http://mmbiz.xxxx",
650 * "protocol": "xxxxxxxxxx",
651 * "agreement_media_id":"xxxxxxxxxx",
652 * "operator_media_id":"xxxxxxxx",
653 * "end_time": 1438990559,
654 * "primary_category_id": 1,
655 * "secondary_category_id": 101
656 * }
657 *
658 * Callback:
659 *
660 * - `err`, 调用失败时得到的异常
661 * - `result`, 调用正常时得到的对象
662 *
663 * @name updateSubmerchant
664 * @param {Object} options 子商户相关资料
665 * @param {Function} callback 回调函数
666 */
667make(exports, 'updateSubmerchant', function (options, callback) {
668 var url = this.endpoint + '/card/submerchant/update?access_token=' + this.token.accessToken;
669 var data = {
670 'info': options
671 };
672 this.request(url, postJSON(data), wrapper(callback));
673});
674
675/**
676 * 拉取单个子商户信息接口
677 * 接口说明
678 * 通过指定的子商户merchant_id,拉取该子商户的基础信息。
679 * 注意,用母商户去调用接口,但接口内传入的是子商户的merchant_id。
680 * Examples:
681 * ```
682 * api.getSubmerchant('merchantId', callback);
683 * ```
684 * Callback:
685 *
686 * - `err`, 调用失败时得到的异常
687 * - `result`, 调用正常时得到的对象
688 *
689 * @name getSubmerchant
690 * @param {String} merchantId 子商户相关资料
691 * @param {Function} callback 回调函数
692 */
693make(exports, 'getSubmerchant', function (merchantId, callback) {
694 var url = this.endpoint + '/card/submerchant/get?access_token=' + this.token.accessToken;
695 var data = {
696 'merchant_id': merchantId
697 };
698 this.request(url, postJSON(data), wrapper(callback));
699});
700
701
702/**
703 * 批量拉取子商户信息接口
704 * 接口说明
705 * 母商户可以通过该接口批量拉取子商户的相关信息,一次调用最多拉取100个子商户的信息,可以通过多次拉去满足不同的查询需求
706 * Examples:
707 * ```
708 * api.batchgetSubmerchant(data, callback);
709 * ```
710 * Callback:
711 *
712 * - `err`, 调用失败时得到的异常
713 * - `result`, 调用正常时得到的对象
714 *
715 * @name batchgetSubmerchant
716 * @param {Object} data 查询条件 {"begin_id": 0,"limit": 50,"status": "CHECKING"}
717 * @param {Function} callback 回调函数
718 */
719make(exports, 'batchgetSubmerchant', function (data, callback) {
720 var url = this.endpoint + '/card/submerchant/batchget?access_token=' + this.token.accessToken;
721 this.request(url, postJSON(data), wrapper(callback));
722});
723
724
725/**
726 * 拉取拉取会员信息接口
727 * 接口说明
728 * 支持开发者根据CardID和Code查询会员信息。
729 * Examples:
730 * ```
731 * api.getMemberCardUserInfo({"card_id": abd5e78412e5d12ff,"code": 5566778811002233}, callback);
732 * ```
733 * Callback:
734 *
735 * - `err`, 调用失败时得到的异常
736 * - `result`, 调用正常时得到的对象
737 *
738 * @name getMemberCardUserInfo
739 * @param {Object} info 查询条件 {"card_id": abd5e78412e5d12ff,"code": 5566778811002233}
740 * @param {Function} callback 回调函数
741 */
742make(exports, 'getMemberCardUserInfo', function (info, callback) {
743 var url = this.endpoint + '/card/membercard/userinfo/get?access_token=' + this.token.accessToken;
744 var data = info;
745 this.request(url, postJSON(data), wrapper(callback));
746});
747
748/**
749 * 更新会员信息
750 * 接口说明
751 * 当会员持卡消费后,支持开发者调用该接口更新会员信息。会员卡交易后的每次信息变更需通过该接口通知微信,便于后续消息通知及其他扩展功能。
752 * Examples:
753 * ```
754 * api.updateMemberCardUserInfo(data, callback);
755 * ```
756 * Callback:
757 *
758 * - `err`, 调用失败时得到的异常
759 * - `result`, 调用正常时得到的对象
760 *
761 * @name getMemberCardUserInfo
762 * @param {Object} data 查询条件 {"card_id": abd5e78412e5d12ff,"code": 5566778811002233, "record_bonus" : 3000}
763 * @param {Function} callback 回调函数
764 */
765make(exports, 'updateMemberCardUserInfo', function (data, callback) {
766 var url = this.endpoint + '/card/membercard/updateuser?access_token=' + this.token.accessToken;
767 this.request(url, postJSON(data), wrapper(callback));
768});