| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- const {
- UniCloudError
- } = require('../../../common/error')
- const {
- camel2snakeJson,
- snake2camelJson
- } = require('../../../common/utils')
- function generateApiResult (apiName, data) {
- if (data.ret || data.error) {
- // 这三种都是qq的错误码规范
- const code = data.ret || data.error || data.errcode || -2
- const message = data.msg || data.error_description || data.errmsg || `${apiName} fail`
- throw new UniCloudError({
- code,
- message
- })
- } else {
- delete data.ret
- delete data.msg
- delete data.error
- delete data.error_description
- delete data.errcode
- delete data.errmsg
- return {
- ...data,
- errMsg: `${apiName} ok`,
- errCode: 0
- }
- }
- }
- function nomalizeError (apiName, error) {
- throw new UniCloudError({
- code: error.code || -2,
- message: error.message || `${apiName} fail`
- })
- }
- async function callQQOpenApi ({
- name,
- url,
- data,
- options,
- defaultOptions
- }) {
- options = Object.assign({}, defaultOptions, options, { data: camel2snakeJson(Object.assign({}, data)) })
- let result
- try {
- result = await uniCloud.httpclient.request(url, options)
- } catch (e) {
- return nomalizeError(name, e)
- }
- let resData = result.data
- const contentType = result.headers['content-type']
- if (
- Buffer.isBuffer(resData) &&
- (contentType.indexOf('text/plain') === 0 ||
- contentType.indexOf('application/json') === 0)
- ) {
- try {
- resData = JSON.parse(resData.toString())
- } catch (e) {
- resData = resData.toString()
- }
- } else if (Buffer.isBuffer(resData)) {
- resData = {
- buffer: resData,
- contentType
- }
- }
- return snake2camelJson(
- generateApiResult(
- name,
- resData || {
- errCode: -2,
- errMsg: 'Request failed'
- }
- )
- )
- }
- module.exports = {
- callQQOpenApi
- }
|