I’m currently trying to validate an in app purchase receipt from Apple but it seems the receipt is malformed.
The receipt field in the transaction event looks like this:
[receipt] =\> “\<7b0a0922 7369676e 61747572 6522203d 20224178 63714332 6a553536 68757735 77716453 3951576e 45426136 7941506c 6b364a4c 46325945 6f374165 6130716c 77734852 32784968 52664832 63756b4b 4c527876 4a6d4a32 63727938 63575870 61492b54 41634243 46336c76 79374e77 53685159 61374a48 72433944 6e74576a 6c2f6766 53527533 4d587a56 716d6c49 4f413068 6646694a 4d574778 69446350 714e6457 426c4a68 47625659 66737266 36597570 31765677 71463158 6870476f 596f466b 59586c4b 4c514131 53754e64 7a49364d 71675970 4b734371 54377734 4767504f 664c4439 694b4644 777a4268 53736d78 69466738 56414272 784d6879 4a6c7342 72696131 44632f59 67765462 6b6c5868 68336134 434d6a73 786c6569 67565333 2b7a6665 67613063 5a634142 6a647945 58586948 68507542 57534244 59484e57 302b725a 3462456c 56494a59 492f764c 76554c34 74503571 6a374c65 626c674a 316d6951 6f414141 57414d49 49466644 43434247 53674177 49424167 49494475 7458682b 65654359 30774451 594a4b6f 5a496876 634e4151 45464251 4177675a 5978437a 414a4267 4e564241 5954416c 56544d52 4d774551\<\M-b\M^@\M-&\>
Exactly like this, so it comes without a closing quote sign at the end.
Furthermore if I convert this HEX receipt into ASCII, we get something like this:
"signature" = "AyxGFeQReVCmG6XIPSIQMoQi6OD4E6yTbIIEO1tIsJpr+17rQbT1zo0ZVBFHpy2xQXnbX7CYP3MoXps4XBPgGddulIAbtjdIykE57lGs0PDIBvqb75yzAK5/kUwuoR+8SfyUBKB7jjZpWSWZuOYBB0cWQt8h2NePiwV7L+4zrkm6y3SvMutP9yej1qvCpfDXkUYBEwc+6WmXpR/CQ6TWIrCfBoqEz1CBq2y/OBxUyOibtFNoO9poNccbS+z1ZVhM+arE1hLfJ8HHOMauJy18g8BAkWHQUeJqGhaB4zXTs5N30qAWM2EuS+DYDCVxnd6op536w27Ga6Ak7alX/KY3og4AAAWAMIIFfDCCBGSgAwIBAgIIDutXh+eeCY0wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQ
Seems to be a good start of JSON data, but from a different example I know that the JSON data should contain these fields:
"signature" = "ApMUBC86AlzNikV5YtrZAMiJQbK8EdeXk63kWBAXzlC8dXGujq47ZnIYKoFE1oN/FS8cXlFfp9YXt9iMBdL250lRRmiNGbyhitryYVAQori32W9aR0T8L/aYVBdfW+Oy/QyPZEmoNKxhnt2WNSUDoUhZ8Z+4pP70pe5kUQlbdIVhAAADVzCCA1MwggI7oAMCAQICCGUUkU3ZWAS1MA0GCSqGSIb3DQEBBQUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSYwJAYDVQQLDB1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAwwqQXBwbGUgaVR1bmVzIFN0b3JlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA5MDYxNTIyMDU1NloXDTE0MDYxNDIyMDU1NlowZDEjMCEGA1UEAwwaUHVyY2hhc2VSZWNlaXB0Q2VydGlmaWNhdGUxGzAZBgNVBAsMEkFwcGxlIGlUdW5lcyBTdG9yZTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMrRjF2ct4IrSdiTChaI0g8pwv/cmHs8p/RwV/rt/91XKVhNl4XIBimKjQQNfgHsDs6yju++DrKJE7uKsphMddKYfFE5rGXsAdBEjBwRIxexTevx3HLEFGAt1moKx509dhxtiIdDgJv2YaVs49B0uJvNdy6SMqNNLHsDLzDS9oZHAgMBAAGjcjBwMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUNh3o4p2C0gEYtTJrDtdDC5FYQzowDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBSpg4PyGUjFPhJXCBTMzaN+mV8k9TAQBgoqhkiG92NkBgUBBAIFADANBgkqhkiG9w0BAQUFAAOCAQEAEaSbPjtmN4C/IB3QEpK32RxacCDXdVXAeVReS5FaZxc+t88pQP93BiAxvdW/3eTSMGY5FbeAYL3etqP5gm8wrFojX0ikyVRStQ+/AQ0KEjtqB07kLs9QUe8czR8UGfdM1EumV/UgvDd4NwNYxLQMg4WTQfgkQQVy8GXZwVHgbE/UC6Y7053pGXBk51NPM3woxhd3gSRLvXj+loHsStcTEqe9pBDpmG5+sk4tw+GK3GMeEN5/+e1QT9np/Kl1nj+aBw7C0xsy0bFnaAd1cSS6xdory/CUvM6gtKsmnOOdqTesbp0bs8sn6Wqs0C9dgcxRHuOMZ2tm8npLUm7argOSzQ=="; "purchase-info" = "ewoJIm9yaWdpbmFsLXB1cmNoYXNlLWRhdGUtcHN0IiA9ICIyMDEyLTA0LTMwIDA4OjA1OjU1IEFtZXJpY2EvTG9zX0FuZ2VsZXMiOwoJIm9yaWdpbmFsLXRyYW5zYWN0aW9uLWlkIiA9ICIxMDAwMDAwMDQ2MTc4ODE3IjsKCSJidnJzIiA9ICIyMDEyMDQyNyI7CgkidHJhbnNhY3Rpb24taWQiID0gIjEwMDAwMDAwNDYxNzg4MTciOwoJInF1YW50aXR5IiA9ICIxIjsKCSJvcmlnaW5hbC1wdXJjaGFzZS1kYXRlLW1zIiA9ICIxMzM1Nzk4MzU1ODY4IjsKCSJwcm9kdWN0LWlkIiA9ICJjb20ubWluZG1vYmFwcC5kb3dubG9hZCI7CgkiaXRlbS1pZCIgPSAiNTIxMTI5ODEyIjsKCSJiaWQiID0gImNvbS5taW5kbW9iYXBwLk1pbmRNb2IiOwoJInB1cmNoYXNlLWRhdGUtbXMiID0gIjEzMzU3OTgzNTU4NjgiOwoJInB1cmNoYXNlLWRhdGUiID0gIjIwMTItMDQtMzAgMTU6MDU6NTUgRXRjL0dNVCI7CgkicHVyY2hhc2UtZGF0ZS1wc3QiID0gIjIwMTItMDQtMzAgMDg6MDU6NTUgQW1lcmljYS9Mb3NfQW5nZWxlcyI7Cgkib3JpZ2luYWwtcHVyY2hhc2UtZGF0ZSIgPSAiMjAxMi0wNC0zMCAxNTowNTo1NSBFdGMvR01UIjsKfQ=="; "environment" = "Sandbox"; "pod" = "100"; "signing-status" = "0";
So my suspicion is, that the receipt field in the transaction data is not fully transmitted. Does some else have problems with iOS receipt validation?