>  기사  >  백엔드 개발  >  WeChat 애플릿 개발 시 게시물 요청에 대한 자세한 설명

WeChat 애플릿 개발 시 게시물 요청에 대한 자세한 설명

韦小宝
韦小宝원래의
2018-03-14 16:52:0314179검색

이 기사에서는 WeChat 애플릿 개발의 게시물 요청에 대해 설명합니다. WeChat 애플릿 개발의 게시물 요청에 대해 모르거나 WeChat 애플릿 개발의 게시물 요청에 관심이 있다면 살펴보겠습니다. 이 기사를 함께 살펴보겠습니다. 헛소리는 그만하고 요점을 살펴보겠습니다.

1.post request


wx.request(OBJECT)
wx.request
이 HTTPS 요청을 시작합니다. WeChat 애플릿은 동시에 5개의 네트워크 요청 연결만 가질 수 있습니다.
공식 웹사이트 설명


입니다. Function콜백 함수 No


WeChat 미니 프로그램 예시

wx.request({
  url: 'test.php', //仅为示例,并非真实的接口地址
  data: {
        x: '' , 
        y: ''
   }, 
  header: { 
    'content-type': 'application/json' 
  }, 
  success: function(res) { 
    console.log(res.data) 
  }
})


이 요청은 GET 방식이면 괜찮고, 헤더를 추가할 필요가 없습니다.
하지만 POST에는 더 큰 문제가 있습니다.

디버깅을 위해 다음 코드를 사용합니다(Code 1):

wx.request({
    url: ApiHost + '/?service=default.getOrderInfo',
    data: {
      'order_id': order_id
    },
    method: 'POST',
    success: function (res) {
      // console.log(res);
      if (res.data.ret == 200) {
       //something to do
      }
      else{
       //something to do
      }
    }
    fail: function (res) {
      console.log(res);
    }
  });

아래 그림에 주의하세요. WeChat 개발 도구의 프롬프트는 다음과 같습니다.

POST 요청은 데이터 값을 쿼리 문자열 매개변수 대신 요청 페이로드를 사용하면 백엔드 서버가 주의를 기울이지 않으면 데이터를 가져올 수 없습니다.
인터넷에는 이런 개혁 방법이 많이 있습니다. ----헤더 추가

wx.request({
    url: ApiHost + '/?service=default.getOrderInfo',
    data: {
      //数据urlencode方式编码,变量间用&连接,再post
      'order_id='+order_id
    },
    method: 'POST',
    header:{
      'content-type':'application/x-www-form-urlencoded'
    },
    success: function (res) {
      // console.log(res);
      if (res.data.ret == 200) {
       //something to do
      }
      else{
       //something to do
      }
    }
    fail: function (res) {
      console.log(res);
    }
  });

이렇게 수정하면 백엔드에서는 특별한 처리가 필요하지 않습니다.
하지만...

아직도 표준 방식을 사용하고 싶기 때문에 백엔드 서버를 수정하는 방법 밖에 없습니다.
여기서는 Phalapi 프레임워크를 사용하고 있는데 추천드려요~~

if(DI()->request->getHeader('content-type'))
{    
  $contentType = DI()->request->getHeader('content-type');
}
if(!empty($contentType)&&(strtolower(@$contentType) === 'application/json'))
{
    $HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : "{}";
    DI()->request = new PhalApi_Request(array_merge($_GET,json_decode($HTTP_RAW_POST_DATA, true)));
}

드디어 PC에서 Code 1을 이용하여 디버깅을 통과했습니다. 표준 요청을 사용하고 application/x-www-form-urlencoded 모드를 사용하지 마십시오.

그런데...실제 머신을 사용하여 디버깅할 때 왜 요청 매개변수를 다시 받을 수 없나요? 이상한 것들. . . . . . . . .
마지막으로 패킷 캡처 및 분석을 통해

실제 머신 측

POST /?service=default.getOrderInfo HTTP/1.0
Host: proxy
Connection: close
Content-Length: 43
Content-Type: application/json
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 
MicroMessenger/6.5.1 NetType/WIFI Language/zh_CN
Referer: https://servicewechat.com/###/0/page-frame.html
Accept-Language: zh-cn

{"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}

PC 시뮬레이션 개발 측


POST /?service=default.getOrderInfo HTTP/1.0
Host: proxy
Connection: close
Content-Length: 43
Origin: http://###.appservice.open.weixin.qq.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 
appservice webview/100000
content-type: application/json
Accept: */*
Referer: https://servicewechat.com/####/devtools/page-frame.html
Accept-Encoding: gzip, deflate, br

{"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}

드디어 차이점을 찾았습니다:
Content-Type과 content-type
에뮬레이터 기본값은 content-type
실제 머신의 기본값은 Content-Type
백엔드 서버에서 Content-Type 처리를 추가하면 완료됩니다.

위 내용이 이 글의 전부입니다. 잘 모르신다면 혼자서도 쉽게 두 가지를 마스터하실 수 있습니다!

관련 권장 사항:
풀다운 로딩 및 풀업 새로 고침을 구현하는 WeChat 애플릿에 대한 자세한 설명

핑거 줌 사진 코드 공유를 구현하는 WeChat 애플릿

WeChat 애플릿 결제를 구현하는 PHP 코드 공유

매개변수 이름 Type 필수 Description
url String 개발자 서버 인터페이스 주소
data Object, String No 요청 매개변수
header 아니요 The 기본값은 GET, 유효한 값: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT success
No 수신 반환됨 Developer Service, RES = {data : 'Developer Server에서 반환 된 컨텐츠'} Fail
Function NoInterface Call 실패 콜백 함수 complete Function
인터페이스 호출 종료 시 콜백 함수(호출 성공 또는 실패 시 실행)

위 내용은 WeChat 애플릿 개발 시 게시물 요청에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.