2017-05-04 1 views
0

사용자가 계정을 만들 때 요금을 청구하려고합니다. 모든 것이 설정되고 코드로 완벽하게 작동합니다. 사용자 로그인이 웹 사이트의 "프리미엄"섹션에있을 때 계정을 만들고 아래 코드로 요금이 부과됩니다.PassportJS 및 Stripe

문제 : 사용자의 신용 카드가 여러 가지 이유로 거절당하는 경우 ... 사용자 계정이 아직 생성되었습니다. 신용 카드가 실패 할 경우 코드의 해당 부분에 도달하지 못하도록 내 코드를 어떻게 변경합니까?

참고 : 사용자가 사용자 이름을 사용하여 계정을 만들려고 할 때 작동합니다. 웹 앱은 /를 구매자에게 리디렉션하여 새 사용자 이름을 선택합니다. 그러나 사용자가 먼저 생성되기 때문에 신용 카드 오류를 처리하지 못합니다.

도움 주셔서 감사합니다.

user.save(function(err) { 
     console.log('this is the problem' + ' ' + err) 
     if(err){ 
     return res.redirect('/buy') 
     } 
     var token = req.body.stripeToken; // Using Express 
     var charge = stripe.charges.create({ 
     amount: 749, 
     currency: "usd", 
     description: "Website.com Premium - One time Payment", 
     source: token, 

     }, function(err, charge) { 
      if(err) { 
       console.log(err); 
       return res.redirect('/buy') 
      } 
      console.log('charged') 
      req.logIn(user, function(err) { 
       if(err) { 
       console.log(err); 
       } 
       console.log('all looks good') 
       res.redirect('/results'); 
      }); 
     }); 
     }); 
    }); 
+0

이 질문에 두 번 질문했습니다 ... –

답변

1

문제는 사용자를 데이터베이스에 저장 한 후 지불을 처리한다는 것입니다. 이 문제를 해결할 수있는 두 가지 방법이 있습니다. 지불이 실패하면 데이터베이스에서 사용자를 삭제할 수 있습니다. 또는 사용자를 데이터베이스에 저장 한 다음 지불을 처리 할 수 ​​있습니다. 그래서 기본적으로 순서를 바꾸고 어떤 콜백이 어떤 콜백의 안에 중첩되어 있는지.

나는 데이터베이스에 대한 스트레스와로드를 줄이는 호출이 줄어들 기 때문에 두 번째 솔루션을 제안하고 싶습니다.

다음은이를 달성하는 방법의 기본 예입니다. 나는 코드의 내부와 외부를 모두 알지 못하기 때문에, 어떻게 작업하는지에 맞게 약간의 조정을해야 할 수도 있지만 기본 아이디어는 거기에 있습니다.

var token = req.body.stripeToken; // Using Express 
var charge = stripe.charges.create({ 
    amount: 749, 
    currency: "usd", 
    description: "Website.com Premium - One time Payment", 
    source: token, 

}, function(err, charge) { 
    if (err) { 
     console.log(err); 
     return res.redirect('/buy') 
    } 
    console.log('charged') 
    user.save(function(err) { 
     console.log('this is the problem' + ' ' + err); 
     if (err) { 
      return res.redirect('/buy') 
     } 
     req.logIn(user, function(err) { 
      if (err) { 
       console.log(err); 
      } 
      console.log('all looks good') 
      res.redirect('/results'); 
     }); 
    }); 
}); 

기본적으로 스트라이프 차지가 생성되므로 성공적이면 데이터베이스에 사용자를 생성합니다.

희망적으로 도움이됩니다.