2017-04-11 2 views
1

if error != nil으로 Swift의 PFCloud 함수에서 오류를 처리하려고합니다. 클라우드 코드 나 스트라이프가 오류를 반환하지는 않지만 Swift는 마치 하나가있는 것처럼 응답합니다.Swift가 Cloud Code 오류를 잘못 읽음

스위프트

PFCloud.callFunctionInBackground("authorize", withParameters: ["customer": self.customerID!, "cost": self.stripePrice, "type": self.stripeDescription) { (success: AnyObject?, error: NSError?) -> Void in 
    print("Authorizing") 
    if error != nil { 
     print("authorizeError") 
     self.displayAlert("Error", message: "There was an error authorizing your payment. Please try again later.") 
    } else { 
     if type == 1{ 
      print("one") 
      self.performSegueWithIdentifier("one", sender: self) 
      self.viewTimer.invalidate() 
      self.cancelTimer.invalidate() 
     } else { 
      self.performSegueWithIdentifier("two", sender: self) 
      print("two") 
      self.viewTimer.invalidate() 
      self.cancelTimer.invalidate() 
     } 
    } 
} 

클라우드 코드 (Node.js를)

Parse.Cloud.define("authorize", function(request, response){ 
    var user = request.user; 
    stripe.charges.create({ amount: request.params.cost, currency: "cad", customer: request.params.customer, capture: false}).then(function(charge) { 
     user.set("chargeID", charge.id); 
     return user.save(null, { useMasterKey: true }); 
    }).then(function(result) { 
     console.log(charge); 
     console.log(charge.id); 
     response.success(charge); 
    }, function(err) { 
     console.log(err); 
     console.log(charge.id) 
     response.error(err); 
    }); 
}); 

답변

0

문제는 당신이 성공 콜백 charge를 반환하려는 전하가 null 것입니다. 다음과 같이 코드를 변경하십시오.

stripe.charges.create({ amount: request.params.cost, currency: "cad", customer: request.params.customer, capture: false}).then(function(charge) { 
    user.set("chargeID", charge.id); 
    return user.save(null, { useMasterKey: true }); 
}).then(function(result) { 

    // charge is undefined here. 
    console.log(charge); 

    // Return something besides charge 
    response.success("unused result"); 
}, function(err) { 
    console.log(err); 
    console.log(charge.id) 
    response.error(err); 
}); 
+0

예 오류가 없습니다. Stripe 측에서 청구가 성공적으로 생성되었습니다. – Dups

+0

Stripe로 요금이 청구되었다고해서 오류가 없음을 의미하지는 않습니다. 사용자가 적절한 'chargeId'로 저장 되었습니까? 'console.log (charge.id') 행에있을 때 콘솔에 출력되는 것은 무엇입니까? 나는'charge.id'가 정의되지 않았기 때문에 런타임 오류를 일으키고'response.success()'가 절대로 실행되지 않는다고 생각합니다. – toddg

+0

감사합니다. charge.id 줄을 제거했지만 여전히 오류가있는 것처럼 작동합니다. 내가 바꿀 생각 이라니? – Dups

관련 문제