简体   繁体   English

如何从帖子中提取表单数据

[英]How to extract form data from post

My payment gateway has sent a POST to my website with the information as this form-data .我的支付网关已向我的网站发送了一个 POST,其中包含此表单数据的信息。

I tried retrieving the data as:我尝试将数据检索为:

this.http
  .post<any>('https://xyz.app/test', {
    title: 'Testing...',
  })
  .subscribe((data) => {      
    console.log(data);
  });

But no success.但没有成功。 As I get the following gibberish content and error:当我收到以下乱码内容和错误时:

Unexpected error occurred
{
  "headers": {
    "normalizedNames": {},
    "lazyUpdate": null
  },
  "status": 200,
  "statusText": "OK",
  "url": "https://xyz.app/test",
  "ok": false,
  "name": "HttpErrorResponse",
  "message": "Http failure during parsing for https://xyz.app/test",
  "error": {
    "error": {},
    "text": "<!DOCTYPE html><html lang=\"en\"><head>\n    <meta charset=\"utf-8\">\n    <title>xyz</title>\n\n    <base href=\"/\">\n\n    <meta name=\"viewport\" content=\"viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n    <meta name=\"format-detection\" content=\"telephone=no\">\n    <meta name=\"msapplication-tap-highlight\" content=\"no\">\n    <meta name=\"color-scheme\" content=\"light\">\n\n    <link rel=\"icon\" type=\"image/png\" href=\"assets/icon/favicon.png\">\n\n    <!-- add to homescreen for ios -->\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n\n     <style>:root{--ion-color-primary:#5260ff;--ion-color-primary-rgb:82, 96, 255;--ion-color-primary-contrast:#ffffff;--ion-color-primary-contrast-rgb:255, 255, 255;--ion-color-primary-shade:#4854e0;--ion-color-primary-tint:#6370ff;--ion-color-secondary:#3dc2ff;--ion-color-secondary-rgb:61, 194, 255;--ion-color-secondary-contrast:#ffffff;--ion-color-secondary-contrast-rgb:255, 255, 255;--ion-color-secondary-shade:#36abe0;--ion-color-secondary-tint:#50c8ff;--ion-color-tertiary:#5260ff;--ion-color-tertiary-rgb:82, 96, 255;--ion-color-tertiary-contrast:#ffffff;--ion-color-tertiary-contrast-rgb:255, 255, 255;--ion-color-tertiary-shade:#4854e0;--ion-color-tertiary-tint:#6370ff;--ion-color-success:#2dd36f;--ion-color-success-rgb:45, 211, 111;--ion-color-success-contrast:#ffffff;--ion-color-success-contrast-rgb:255, 255, 255;--ion-color-success-shade:#28ba62;--ion-color-success-tint:#42d77d;--ion-color-warning:#ffc409;--ion-color-warning-rgb:255, 196, 9;--ion-color-warning-contrast:#000000;--ion-color-warning-contrast-rgb:0, 0, 0;--ion-color-warning-shade:#e0ac08;--ion-color-warning-tint:#ffca22;--ion-color-danger:#eb445a;--ion-color-danger-rgb:235, 68, 90;--ion-color-danger-contrast:#ffffff;--ion-color-danger-contrast-rgb:255, 255, 255;--ion-color-danger-shade:#cf3c4f;--ion-color-danger-tint:#ed576b;--ion-color-dark:#222428;--ion-color-dark-rgb:34, 36, 40;--ion-color-dark-contrast:#ffffff;--ion-color-dark-contrast-rgb:255, 255, 255;--ion-color-dark-shade:#1e2023;--ion-color-dark-tint:#383a3e;--ion-color-medium:#92949c;--ion-color-medium-rgb:146, 148, 156;--ion-color-medium-contrast:#ffffff;--ion-color-medium-contrast-rgb:255, 255, 255;--ion-color-medium-shade:#808289;--ion-color-medium-tint:#9d9fa6;--ion-color-light:#f4f5f8;--ion-color-light-rgb:244, 245, 248;--ion-color-light-contrast:#000000;--ion-color-light-contrast-rgb:0, 0, 0;--ion-color-light-shade:#d7d8da;--ion-color-light-tint:#f5f6f9}html{--ion-font-family:var(--ion-default-font)}body{background:var(--ion-background-color)}@supports (padding-top: 20px){html{--ion-safe-area-top:var(--ion-statusbar-padding)}}@supports (padding-top: constant(safe-area-inset-top)){html{--ion-safe-area-top:constant(safe-area-inset-top);--ion-safe-area-bottom:constant(safe-area-inset-bottom);--ion-safe-area-left:constant(safe-area-inset-left);--ion-safe-area-right:constant(safe-area-inset-right)}}@supports (padding-top: env(safe-area-inset-top)){html{--ion-safe-area-top:env(safe-area-inset-top);--ion-safe-area-bottom:env(safe-area-inset-bottom);--ion-safe-area-left:env(safe-area-inset-left);--ion-safe-area-right:env(safe-area-inset-right)}}*{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}html{width:100%;height:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%}html:not(.hydrated) body{display:none}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;margin:0;padding:0;position:fixed;width:100%;max-width:100%;height:100%;max-height:100%;text-rendering:optimizeLegibility;overflow:hidden;touch-action:manipulation;-webkit-user-drag:none;-ms-content-zooming:none;word-wrap:break-word;overscroll-behavior-y:none;-webkit-text-size-adjust:none;text-size-adjust:none}html{font-family:var(--ion-font-family)}@charset \"UTF-8\"</style><link rel=\"stylesheet\" href=\"styles.bc92802669c0456a.css\" media=\"print\" onload=\"this.media='all'\"><noscript><link rel=\"stylesheet\" href=\"styles.bc92802669c0456a.css\"></noscript></head>\n\n  <body>\n    <app-root></app-root>\n  <script src=\"runtime.a2227e7648f5402e.js\" type=\"module\"></script><script src=\"polyfills.272ca3dbf05a7a8c.js\" type=\"module\"></script><script src=\"main.9b185556f2c0b4c3.js\" type=\"module\"></script>\n\n</body></html>"
  }
}

another error:另一个错误:

ERROR 
ke {headers: E, status: 200, statusText: 'OK', url: 'https://xyz.app/test', ok: false, …}
error: {error: SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>) at XMLHtt…, text: '<!DOCTYPE html><html lang="en"><head>\n    <meta ch…0b4c3.js" type="module">\x3C/script>\n\n</body></html>'}
headers: E {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message: "Http failure during parsing for https://xyz.app/test"
name: "HttpErrorResponse"
ok: false
status: 200
statusText: "OK"
url: "https://xyz.app/test"
[[Prototype]]: Oe
constructor: class ke
[[Prototype]]: Object

I want to retrieve the payment transaction data and then later display it.我想检索支付交易数据,然后再显示它。

The Payment gateway send me a code in PHP: <?php支付网关在 PHP 中向我发送代码:<?php

    function verifychecksum_eFromStr($str, $key, $checksumvalue) {  
    $sadad_hash = decrypt_e($checksumvalue, $key); 
    $salt = substr($sadad_hash, -4); 
    $finalString = $str . "|" . $salt; 
    $website_hash = hash("sha256", $finalString); 
    $website_hash .= $salt; 
    $validFlag = "FALSE"; 
    if ($website_hash == $sadad_hash) { 
    $validFlag = "TRUE"; 
    } else { 
    $validFlag = "FALSE"; 
    } 
    return $validFlag; 
    } 
    function decrypt_e($crypt, $ky) { 
    $ky = html_entity_decode($ky); 
    $iv = "@@@@&&&&####$$$$"; 
    $data = openssl_decrypt($crypt, "AES-128-CBC", $ky, 0, $iv);  return $data; 
    } 

    $merchantId = '1234657'; //Replace with your merchant ID
    $secretKey = 'XXXXXXXXXXXXXXX'; //Replace with your secret Key
    
    //Save incoming checksumhash into a variable and then unset it because we don't use it while verifying the checksum
    $checksum_response = $_POST['checksumhash'];
    unset($_POST['checksumhash']); 
     
    $data_repsonse = array();  
    $data_repsonse['postData'] = $_POST;  //Incoming POST without checksumhash in it. 
    $data_repsonse['secretKey'] = $secretKey;  
    $key = $secretKey . $merchantId; 

    if (verifychecksum_eFromStr(json_encode($data_repsonse), $key, $checksum_response) === "TRUE") { 
        //You can further check response code and transaction status variables in $_POST to verify transaction is success or failed.
     echo 'Checksum TRUE'; 
    }else{
        //The POST response has not come from Sadad. If you're sure it has come from Sadad, check you've passed correct secret key and merchant ID above.
     echo 'Checksum False'; 
    }

?> ?>

Refer payment gateway documentation请参阅支付网关文档

It might be issued from server side, because it's gives response in html format, server not able to handle json parse method.它可能是从服务器端发出的,因为它以 html 格式给出响应,服务器无法处理 json 解析方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM