2015-04-03 141 views
1

我正在嘗試開發帶有angularjs和asp.net web api的付款模塊。 我正在使用付款API(iyzico)。從Angular js中輸出HTTP POST響應獲取表單數據

使用該API創建購物令牌請求,並且此請求返回一個js腳本響應和一個購物令牌。

我加載這個js文件,付款方式是通過返回js文件生成的。

在生成付款表格後,我輸入了信用卡信息並將這些信息發送給付款api,然後付款api返回響應,但是我無法從頁面獲得此響應(此響應在頁面加載時發出)。

HTTP GET用於生成payment.js購物令牌方法

function loadDetails() { 

     $http.get('/API/api/profile/GetPaymentToken').then(function (results) { 
      $scope.paymentData = jQuery.parseJSON(results.data); 
      $scope.code_snippet = $sce.trustAsHtml($scope.paymentData.code_snippet); 
      var paymentScriptUrl = "https://www.iyzico.com/frontend/form/v1/widget.js?mode=test&token=" + $scope.paymentData.transaction_token; 
      $.ajax({ 
       url: paymentScriptUrl, 
       dataType: "script", 
       cache: true, 
       success: function (data, textStatus, jqXHR) { 
        var f = new Function(data); 
        f(); 

        iyzi_jQuery(this).iyziPayment({ 
         host: 'https://iyziconnect.com/pay-with-transaction-token/', 
         mode: 'test', 
         assetsURL: 'https://www.iyzico.com/frontend/form/v1/', 
         installment: '0', 
         language: 'tr' 
        }); 

       }, 
       error: function (jqXHR, status, err) { 
        console.log(""); 
       } 
      }); 
     }, 
      function (response) { // optional 
       _helper.error.handleError(toaster, response.data, response.status); 
      }) 

    } 

令牌生成器在Web.Api,這就是所謂的payment.js

[Authorize] 
[HttpGet] 
[Route("GetPaymentToken")] 
public async Task<IHttpActionResult> GetPaymentToken() 
{ 
    System.Diagnostics.Debugger.Break(); 
    WebRequest request = WebRequest.Create("https://api.iyzico.com/v2/create"); 
    request.Method = "POST"; 
    var rand = new Random(); 
    var external_id = rand.Next(0, 100000000); 
    string postData = "api_id=my_id" 
    + "&secret=my_secret" 
    + "&external_id=" + external_id.ToString() 
    + "&mode=test" 
    + "&type=CC.DB" 
    + "&return_url=http://localhost:2020/payment2" //returning url 
    + "&amount=10020" 
    + "&currency=TRY" 
    + "&descriptor=PAYMENT_DESCRIPTION" 
    + "&customer_contact_ip=CUSTOMER_IP" 
    + "&customer_language=tr" 
    + "&installment=false"; 

    byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(postData); 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = byteArray.Length; 
    System.IO.Stream dataStream = request.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length); 
    dataStream.Close(); 

    WebResponse response = request.GetResponse(); 
    dataStream = response.GetResponseStream(); 

    System.IO.StreamReader reader = new System.IO.StreamReader(dataStream); 
    string responseFromServer = reader.ReadToEnd(); 

    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 

    return Ok(responseFromServer); 

獲得購物憑證後輸入我的信用卡信息和發送表單到外部付款API和外部API返回信息到我的返回網址(http://localhost:2020/payment2)關於我的付款是成功還是失敗。

我可以看到從鉻開發人員工具>網絡操作從外部api返回響應,但我無法從mycontroller js文件獲取該表單數據。返回響應低於

Remote Address:[::1]:2020 
Request URL:http://localhost:2020/payment2 
Request Method:POST 
Status Code:200 OK 
Response Headers 
view source 
Cache-Control:private 
Content-Length:11337 
Content-Type:text/html 
Date:Fri, 03 Apr 2015 08:45:22 GMT 
Server:Microsoft-IIS/8.5 
X-Powered-By:ASP.NET 
Request Headers 
view source 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip, deflate 
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6,tr;q=0.4 
Cache-Control:max-age=0 
Connection:keep-alive 
Content-Length:532 
Content-Type:application/x-www-form-urlencoded 
Cookie:countrySCJS=TR; ootdcuSCJS=34602; ootdchSCJS=10742; ctxjs1420m06d05=7b2273756363657373223a302c226c6f675f616374697665223a317d; ASPSESSIONIDQCDBDRBQ=BKGJHHKCKDDLJCBBPMPJJHFH; ASPSESSIONIDQAADBTBR=AMPJDALCPFGILMAOKEDMMGBP; ASPSESSIONIDSCAADQAR=GKKFJCCDLILKPNHAEHBHHLHJ 
Host:localhost:2020 
Origin:null 
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 
Form Data 
view source 
view URL encoded 
**json:{"response":{"state":"failed","date_time":"15-04-03 08:43:24","error_code":"800.100.154","error_message":"transaction marked as invalid","error_message_tr":""},"transaction":{"transaction_id":"MTQyODA1MDU4NAnrin0vdEV06f4hWARX","external_id":"23583443","reference_id":"____________20150403084323.653059Kq","state":"rejected","connector_type":"Isbank","installment_count":0}}** 

我怎樣才能得到那個名爲數組的json?

回答

0

你必須犧牲你的單頁應用程序的回調。

  1. 獲取回調到您的REST地址
  2. 過程中的POST參數
  3. 生成(返回的text/html)FAIL頁面的簡單的成功。讓此頁面包含結果並鏈接到相應的頁面(主頁面url或付款頁面url)
  4. 鏈接應打開您的單個頁面angularjs,並且您的控制器應根據URL顯示 適當的頁面。