请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

2-7 git中取消关注打印不出信息,关注可以打印信息,如何解决?

g.js

'use strict'

var sha1 = require('sha1');
var getRawbody = require('raw-body');
var Wechat = require('./wechat');
var util = require('./util');

module.exports = function (opts) {

	var wechat  = new Wechat(opts);

	return  ( function *(ctx, next) {

		var token = opts.token;
		var signature = ctx.query.signature;
		var echostr = ctx.query.echostr;
		var timestamp = ctx.query.timestamp;
		var nonce = ctx.query.nonce;
		var str = [token, timestamp, nonce].sort().join('');
		var sha = sha1(str);

		if (ctx.method === 'GET') {
			if (sha === signature) {
				ctx.body = echostr + '';
			} else {
				ctx.body = 'wong';
			}
		} else if(ctx.method === 'POST'){
			if (sha !== signature) {
				ctx.body = 'wrong';
				return false;
			} 

			var data = yield getRawbody(ctx.req, {
				length: ctx.length,
			    limit: '1mb',
			    encoding: ctx.charset
			})

			var content = yield util.parseXMLAsync(data);

			console.log(content);

		}
	})
}

wechat.js

'use strict'

var Promise = require('bluebird');
var request =  Promise.promisify(require('request'));

var prefix = 'https://api.weixin.qq.com/cgi-bin/';
var api = {
	accessToken: prefix + 'token?grant_type=client_credential'
}

function Wechat(opts) {
	
	var that = this;
	this.appID = opts.appID;
	this.appSecret = opts.appSecret;
	this.getAccessToken = opts.getAccessToken;
	this.saveAccessToken = opts.saveAccessToken;

	this.getAccessToken()
		.then(function (data) {
			try {
				data = JSON.parse(data);
			}
			catch(e) {
				return that.updateAccessToken();
			}

			if (that.isValidAccressToken(data)) {
				return Promise.resolve(data);
			} else {
				return that.updateAccessToken();
			}
		})
		.then(function (data) {
			that.access_token = data.access_token;
			that.expires_in = data.expires_in;

			that.saveAccessToken(data);
		})
}

Wechat.prototype.isValidAccressToken = function (data) {
	if (!data || !data.access_token || !data.expires_in) {
		return false;
	}

	var access_token = data.access_token;
	var	expires_in = data.expires_in;
	var now = (new Date().getTime());

	if (now < expires_in) {
		return true;
	} else {
		return false;
	}
}

Wechat.prototype.updateAccessToken = function () {

	var appID = this.appID;
	var appSecret = this.appSecret;
	var url = api.accessToken + '&appid=' + appID + '&secret=' + appSecret;

	return new Promise(function (resolve, reject) {
		request({url: url, json: true}).then(function (response) {
			var data = response.body;
			var now = (new Date().getTime());
			var expires_in = now + (data.expires_in - 20) * 1000;
			
			data.expires_in = expires_in;
			resolve(data);
		})
	})
}

module.exports = Wechat;

只能打印出关注的,如何解决

https://img1.sycdn.imooc.com/szimg//58bacbab0001d01406930193.jpg

正在回答 回答被采纳积分+3

3回答

Scott 2017-03-06 14:08:41

不合常理啊,你先往下面走,测试下发送文字消息之类的,看能不能收到其他的类型的 post 请求

0 回复 有任何疑惑可以回复我~
  • 提问者 menghuanbaolei #1
    不好意思,这么晚才看到,到了发送文字消息那块,能收到用户发过来的消息,可是设置的被动回复无法发送出去,对此,我已经绝望了!!!(ps:这个账号之前有注册过订阅号)我决定先缓缓,去看看相关的知识,在回过来解决这个问题。(或许,我的问题,只有我自己能解决。)
    回复 有任何疑惑可以回复我~ 2017-03-06 23:47:39
  • 提问者 menghuanbaolei #2
    我想到一个解决方法:我把所有服务开启来,然后你远程自己操作一次,看一次,这样子你或许可以知道问题出在哪,也方便很多;
    或者,我把文件发给你。
    回复 有任何疑惑可以回复我~ 2017-03-07 00:05:54
  • Scott 回复 提问者 menghuanbaolei #3
    能收到,但是自己设置的回复不能返回的话,是不是 next 调用栈断开了,你用的是 koa 2.0 吧,怀疑:
    
    var content = yield util.parseXMLAsync(data);
     
                console.log(content);
    
    也就是 ctx.body 赋值之后就不再执行了。
    
    你可以把 koa 降到 1.2.0,同时语法改成是 1.2.0 的 API 用法试试看,如果能跑通的话,再升到 2.0 之后,看看是不是一些 Promise 中间件是需要 koa-convert 一下才能使用
    回复 有任何疑惑可以回复我~ 2017-03-07 08:59:57
Scott 2017-03-05 09:42:08

在 if (sha !== signature) { 前面打印一下 ctx.req,看看取关时候,会不会过来正常的请求和数据,另外你使用的是公众测试号么

0 回复 有任何疑惑可以回复我~
  • 提问者 menghuanbaolei #1
    1、取关的时候不会有请求和数据,ps:关注收到的post请求是404
    2、是测试公众号
    回复 有任何疑惑可以回复我~ 2017-03-05 10:56:10
  • 提问者 menghuanbaolei #2
    data的时候就只能获取关注的信息,到content的时候也是只能获取关注的信息
    回复 有任何疑惑可以回复我~ 2017-03-05 11:51:24
提问者 menghuanbaolei 2017-03-04 22:19:08

关注能收到post,移除收不到post请求

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信