WeChat JS SDK wx.chooseImage (), wx.uploadImage () не работает - PullRequest
0 голосов
/ 19 октября 2019

У меня есть официальная учетная запись WeChat, и я создал небольшое приложение для чата. Я пытаюсь отправить изображения с помощью WeChat JSSDK, но это не работает. Я следовал этому уроку: https://developers.weixin.qq.com/doc/offiaccount/en/OA_Web_Apps/JS_SDK.html#1

Мой код здесь:

<html>
	<head>
		<!--<script type="text/javascript" src="js/jweixin-1.4.0.js"></script>-->
		<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
		<script type="text/javascript" src="js/jweixin-1.2.0.js"></script>
		<script type="text/javascript" src="js/sha1.js"></script>
	</head>
<body>
	<div>Hello world!</div>
	<button class="btn btn_primary" onclick="initSdk()">Init sdk</button>
	<button class="btn btn_primary" id="chooseImage">Choose image</button>


<script type="text/javascript">	
	function initSdk() {  //Only click to 'Init sdk' after document ready
        var d = new Date();
        var timestamp = Math.floor(d.getTime() / 1000);
        var nonce = Math.random().toString(36).substr(2, 15);
        var string = "param1=param1&param2=param2&noncestr=" + nonce + "&timestamp=" + timestamp;
        var signature = sha1(string); //sha1 function is added to separate js file

        wx.config({
            debug: true,
            appId: '...', //my appid
            appSecret: '..', //my appsecret
            timestamp: timestamp, 
            nonceStr: nonce, 
            signature: signature,
            wechatToken: '...',//Getted from WeChat API by my backend, no older than 2 hours
            jsApiList: [
                'chooseImage',
                'uploadImage'
            ]
        });

        wx.error(function (res) {
            console.log('error');
        });

        wx.ready(function () {
            console.log('ready');
        });
    };

	document.querySelector('#chooseImage').onclick = function (res) {
		debugger;
		wx.chooseImage({
			count: 1,
			sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
			sourceType: ['album', 'camera'],
			success: function (res) {
				debugger;
				console.log('success');
				var localId = res.localIds;
				console.log(localId);
				//Todo: call wx.uploadImage(...) with image localId
			},
			fail: function (res) {
				debugger;
				console.log('fail');
			},
			complete: function (res) {
				debugger;
				console.log('complete');
			},
			cancel: function (res) {
				debugger;
				console.log('cancel');
			},
			trigger: function (res) {
				debugger;
				console.log('trigger');
			}
		});
	};

</script>

</body>

Когда я нажимаю кнопку 'Init sdk', я получаю две строки в консоли браузера:

"config", {debug: true, appId: "...", appSecret: "..", timestamp: 1571442446, nonceStr: "oet50lzzo1f", …}
ready

так что все выглядит хорошо, JSSDK инициализирован, и из функции wx.ready () появляется строка «ready». Теперь я нажимаю кнопку «Выбрать изображение», и появляется следующая строка:

"chooseImage", {count: 1, sizeType: Array(2), sourceType: Array(2), success: ƒ, fail: ƒ, …}

Но нет строки 'success' и значение localId (необходимое для загрузки изображения) не появляется в консоли. Похоже, что wx.chooseImage () работает, но не работает. И здесь нет 'fail', не появляются 'complete' строки, поэтому я думаю, что ни один случай не запускается внутри chooseImage (). В чем может быть проблема? Когда я даю неверные данные конфигурации (appsecret, token и т. Д.), Я получаю строку «готово» также в консоли. Я также попробовал более новый JSSDK (jweixin-1.4.0.js), но проблема та же.

Спасибо за помощь!

...