Home > Article > Backend Development > A brief analysis of how to handle WeChat payment notifications in PHP_PHP Tutorial
The implementation of the notification mechanism only has official documentation and no demo code. For those who have never done it before, it will take a lot of time to test.
From what the document says, the structure of the data notified by WeChat each time is relatively complex. It is a multi-segment data. In addition to fetching the POST data, other data must also be fetched.
This first involves a question about the values of php://input and $_POST. Here are a few simple points:
This also helps us understand why the xml_rpc server reads data through file_get_contents(‘php://input’, ‘r’). Instead of reading from $_POST, it is precisely because the data specification of xml_rpc is xml and its Content-Type is text/xml.
5. php://input encounters multipart/form-data, please check RFC1867 for its description. multipart/form-data also means submitting form data using the POST method. It is also accompanied by file upload, so it will be different from the application/x- www-form-urlencoded data format. It will be passed to the server in a more reasonable and efficient data format. When Content-Type is multipart/form-data, even if there is data in the HTTP request body, php://input is empty. At this time, PHP will not fill in the data into the php://input stream. Therefore, it is certain: php://input cannot be used to read enctype=multipart/form-data data.
6. When Content-Type is application/x- www-form-urlencoded, php://input and $_POST data are "consistent". When it is other Content-Type, php://input and The $_POST data is inconsistent. Because only when the Content-Type is application/x-www-form-urlencoded or multipart/form-data, PHP will fill in the corresponding part of the body data in the http request packet into the $_POST global variable. In other cases, PHP ignores both. Except for php://input, which is empty when the data type is multipart/form-data, it may not be empty in other situations
The meaning of the above paraphrased words is that these two methods must be used to read the data sent from WeChat.
Get $POST first. This is a regular payment notification message, in the form of: