Переменная, определенная в угловом переднем конце, равна нулю в ядре нетто 2.1 - PullRequest
0 голосов
/ 13 февраля 2019

Я получаю этот токен обратно с stripe.com, this.token tok_1E38C6Hzz3t7gwGKyWMW0mLA и console.log, прежде чем отправить его на сервер.Это определено в коде console.log ниже:

 onSubmit() {
this.stripeService
  .createToken(this.card.getCard(), this.address)
  .subscribe(result => {
    if (result.token) {
      this.approveCreditCardResponse.token = result.token.id;
      console.log('this.address', this.address);
      console.log('this.token', this.approveCreditCardResponse.token);
    } else if (result.error) {
      // Error creating the token
      console.log(result.error.message);
    }
  });
    const data = {
      "amount" : this.approveCreditCardResponse.amount,
      "currency" : this.approveCreditCardResponse.currency,
      "description" : this.approveCreditCardResponse.description,
      "token" : this.approveCreditCardResponse.token,
      "name": this.address.name,
      "address_line1": this.address.address_line1,
      "address_line2": this.address.address_line2,
      "address_city": this.address.address_city,
      "address_state" : this.address.address_state,
      "address_zip": this.address.address_zip,
      "address_country": this.address.address_country
    }
    console.log('this.token', this.approveCreditCardResponse.token);
    this.creditCardService.postCcData(data);

}

Я получаю этот ответ в окне консоли Google Chrome:

this.token tok_1E38C6Hzz3t7gwGKyWMW0mLA

Я отправляю егов ядро ​​ядра aspnet с этим кодом:

public async Task<IActionResult> PostCreditCardData([FromBody] StripeDto stripeDto)
     {

        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

все значения определены в stripeDto с использованием точки останова, кроме токена.токен определяется как ""

Это StripeDto.cs

    public class StripeDto
{
    public int id { get; set; }
    public string amount { get; set; }
    public string currency { get; set; }
    public string description { get; set; }
    public string token { get; set; }
    public string name { get; set; }
    public string address_city { get; set; }
    public string address_line1 { get; set; }
    public string address_line2 { get; set; }
    public string address_state { get; set; }
    public string address_zip { get; set; }
    public string address_country { get; set; }
}

Чего мне не хватает?

1 Ответ

0 голосов
/ 13 февраля 2019

Вам нужно переместить ваш серверный вызов в обратный вызов из вашего чередования вызовов - так оно выглядит следующим образом:

onSubmit() {
    this.stripeService
        .createToken(this.card.getCard(), this.address)
        .subscribe(result => {
            if (result.token) {
                this.approveCreditCardResponse.token = result.token.id;
            } else if (result.error) {
                // Error creating the token
                console.log(result.error.message);
            }

            const data = {
                "amount" : this.approveCreditCardResponse.amount,
                "currency" : this.approveCreditCardResponse.currency,
                "description" : this.approveCreditCardResponse.description,
                "token" : this.approveCreditCardResponse.token,
                "name": this.address.name,
                "address_line1": this.address.address_line1,
                "address_line2": this.address.address_line2,
                "address_city": this.address.address_city,
                "address_state" : this.address.address_state,
                "address_zip": this.address.address_zip,
                "address_country": this.address.address_country
              }
              this.creditCardService.postCcData(data);
        });
}

Что происходит, код поступает на ваш вызов чередования:

this.stripeService
        .createToken(this.card.getCard(), this.address)
        .subscribe(result => {
             //some code here, this is the callback!
             //code here gets executed once the request to stripe is complete
         });

//CODE HERE GETS IMMEDIATELY EXECUTED - IT DOES NOT WAIT FOR THE PREVIOUS
//CALL TO COMPLETE - THINGS DEFINED IN THE CALLBACK ABOVE WILL NOT BE ACCESSIBLE HERE

И затем немедленно , переходя к коду после вызова полосы и вне обратного вызова - он не ожидает завершения вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...