2015-04-03 76 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显示 适当的页面。