我在php脚本中收到一个有趣格式化的$ _POST提交,其格式为:
{"receipt-data":"MILGDgYJKoZIhvcNAQcCoILF..."}
如果我打印$ _POST变量,我得到一个Array(),有时候空的时候包含一个字典“receipt-data”:“....”(我还是不明白为什么有时候它是空的,有时候不)。 在它开始空无一人之前,我尝试打印第一个元素,但没有任何有趣的东西。
简单来说,拦截此类发布并获取与收据数据相对应的值的正确方法是什么?
这是(相当长的)发布数据,我为了保持最大消息限额而取消了一些块:
阵 ( [{ “收据数据”:“MILOdwYJKoZIhvcNAQcCoILOaDCCzmQCAQExCzAJBgUrDgMCGgUAMIK_KAYJKoZIhvcNAQcBoIK_GQSCvhUxgr4RMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQECAQEEAwIBADALAgEDAgEBBAMMATgwCwIBCwIBAQQDAgEAMAsCAQ4CAQEEAwIBGzALAgEPAgEBBAMCAQAwCwIBEAIBAQQDAgEAMAsCARkCAQEEAwIBAzAMAgEKAgEBBAQWAjQrMA0CAQ0CAQEEBQIDARHWMA0CARMCAQEEBQwDMS4wMA4CAQkCAQEEBgIEUDIzMTAYAgEEAgECBBB / lJHT84oy2t4czXgoc79YMBsCAQACAQEEEwwR [...] Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14t_2Mm9zzd5vydtJ3ME \ / BH4WDhRuZPUc38qmbQI4s1LGQEti_9HOb7tJkD8t5TzTYoj75eP9ryAfsfTmDi1Mg0zjEsb_aTwpr \ / yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRt3DfD0XhJ8rxbXjt57UXF6jcfiI1yiXV2Q \ / Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy \ / 5U2pbZMBjM3f3OgcsVuvaDyEO2rpzGU_12TZ \ / wYdV2aeZuTJC_9jVcZ5_oVK3G72TQiQSKscPHbZNnF5jyEuAF1CqitXa5PzQCQc3sHV1ITGCAcswggHHAgEBMIGjMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQXBwbGUgSW5jLjEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMxRDBCBgNVBAMMO0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5AggYWUMhcnSc \ / DAJBgUrDgMCGgUAMA0GCSqGSIb3DQEBAQUABIIBADAfG0M5Lzrl9bhrTKD9nR18Q8HO6zC6XaGtCYtf8a7cE8voswN59EkVCr0yMpcwYxmRjTllJBxJwbPKx3u81B7shTzN5xYfe26nuKqDZBZDo7FqWZSDOhcZ \ / E6TEylmWg6kHmWXZJuebDFnLKhQwsgl3H \ / atOW4eywXAij_OvPBwPiPc9IBgq4u35oqQL 5d2YV38ukBi \ / ToqT97 \ / WG5qvb1JsUDdFoqRuJyA4CCaa8dBlZGDJar29_CjsniFJDz9 \ / NtUcepZTy3T78POFe2cr_Enrl8E9drcrS4xe5Um9R_CVDNwCgoD1bwYA7M5CjrzNO1dqiXLE59d1i3hgSMS4UxnGLGlXFmlF7DZsjwZil7Eec3XtIaJUlLgnkipOuVUqD1nYw6oBAkCursLDC9AlroN5kWMcEXQXRUgRCItvntJoN897cJX6uXpaaSbiDgXbrwTqnM3 / tzHjJgI5T68eI5Dp0LDdxT5FcSd_y3sePf4eTNrJN / eQDMb44ytDg7GOIsG / qiPyHzunp2FrTZZWBIdDP1MvFmLsRoDqvutNqmX5lw3Hobghzk] => “} )
解析时使用:
$json=json_encode($_POST);
$data=json_decode($json, TRUE);
$ data采用以下形式:
{ “{\” 收据数据\ “:\” MILP9wYJKoZIhvcNAQcCoILP6DCCz_QCAQExCzAJBgUrDgMCGgUAMIK \ / qAYJKoZIhvcNAQcBoIK \ / mQSCv5Uxgr_RMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQECAQEEAwIBADALAgEDAgEBBAMMATgwCwIBCwIBAQQDAgEAMAsCAQ4CAQEEAwIBGzALAgEPAgEBBAMCAQAwCwIBEAIBAQQDAgEAMAsCARkCAQEEAwIBAzAMAgEKAgEBBAQWAjQrMA0CAQ0CAQEEBQIDARHWMA0CARMCAQEEBQwDMS4wMA4CAQkCAQEEBgIEUDIzMTAYAgEEAgECBBB5fbMSc4WXteSuDDZ20X4pMBsCAQACAQEEEwwRUHJvZHVjdGlvblNhbmRib3gwHAIBBQIBAQQU6dWy7_Sty19JvZ97C3lbZ7GoJG4wHgIBDAIBAQQWFhQyMDE1LTAxLTAxVDIwOjU4OjUxWjAeAgESAgEBBB [...] b24gQXV0aG9yaXR5AggYWUMhcnSc \ / DAJBgUrDgMCGgUAMA0GCSqGSIb3DQEBAQUABIIBABjGnbWvGn1GhGrK99iWdL_fezRcgTN961IxTFvxt0Ob69SEgVgM \ / 99DbAOdE5xmVNkXucdNXY6RakQ \ / CgoD1bwYA7M5CjrzNO1dqiXLE59d1i3hgSMS4UxnGLGlXFmlF7DZsjwZil7Eec3XtIaJUlLgnkipOuVUqD1nYw6oBAkCursLDC9AlroN5kWMcEXQXRUgRCItvntJoN897cJX6uXpaaSbiDgXbrwTqnM3 \ / tzHjJgI5T68eI5Dp0LDdxT5FcSd_y3sePf4eTNrJN \ / eQDMb44ytDg7GOIsG \ / qiPyHzunp2FrTZZWBIdDP1MvFmLsRoDqvutNqmX5lw3Hobghzk “:” \ “}”}
这是执行objective-c代码的结果:
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:storeURL];
[theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSError *error;
NSDictionary *requestContents = @{
@"receipt-data": [self.receipt base64EncodedStringWithOptions:0]
};
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
options:0
error:&error];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:requestData];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:theRequest queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
[...]
答案 0 :(得分:0)
通过查看创建请求的代码,我们可以看到它正在发送格式化为JSON的数据,因此您首先要通过json_decode运行它,例如
$data=json_decode($_POST[0], TRUE);
您首先不需要通过json_encode运行它,因为它已经作为JSON发送给您。
然后对于“收据数据”值本身,我们可以看到objective-c代码将其编码为base64,因此您需要使用base64_decode对其进行解码:
$data['receipt-data'] = base64_decode($data['receipt-data']);