Ejemplo n.º 1
0
        public void PaymentRequestCompleteResultInitsWithNoArgs()
        {
            var paymentRequestCompleteResult = new PaymentRequestCompleteResult();

            Assert.NotNull(paymentRequestCompleteResult);
            Assert.IsType <PaymentRequestCompleteResult>(paymentRequestCompleteResult);
        }
Ejemplo n.º 2
0
        public void PaymentRequestCompleteResultInits()
        {
            var result = "success";
            var paymentRequestCompleteResult = new PaymentRequestCompleteResult(result);

            Assert.NotNull(paymentRequestCompleteResult);
            Assert.IsType <PaymentRequestCompleteResult>(paymentRequestCompleteResult);
            Assert.Equal(result, paymentRequestCompleteResult.Result);
        }
        private async Task <PaymentRequestCompleteResult> ProcessPaymentComplete(IInvokeActivity invoke, PaymentRequestComplete paymentRequestComplete, CancellationToken token = default(CancellationToken))
        {
            var paymentRequest  = paymentRequestComplete.PaymentRequest;
            var paymentResponse = paymentRequestComplete.PaymentResponse;

            paymentRequest.Details = (await this.ProcessShippingUpdate(
                                          new PaymentRequestUpdate()
            {
                Id = paymentRequest.Id,
                Details = paymentRequest.Details,
                ShippingAddress = paymentResponse.ShippingAddress,
                ShippingOption = paymentResponse.ShippingOption
            },
                                          ShippingUpdateKind.Both,
                                          token)).Details;

            PaymentRecord paymentRecord          = null;
            PaymentRequestCompleteResult result  = null;
            Exception paymentProcessingException = null;

            try
            {
                paymentRecord = await this.paymentService.ProcessPaymentAsync(paymentRequest, paymentResponse);

                result = new PaymentRequestCompleteResult("success");
            }
            catch (Exception ex)
            {
                paymentProcessingException = ex;
                // TODO: If payment is captured but not charged this would be considered "unknown" (charge the captured amount after shipping scenario).
                result = new PaymentRequestCompleteResult("failure");
            }

            try
            {
                var message = invoke.RelatesTo.GetPostToBotMessage();
                if (result.Result == "success")
                {
                    // Resume the conversation with the receipt to user
                    message.Text  = paymentRequestComplete.Id;
                    message.Value = paymentRecord;
                }
                else
                {
                    // Resume the conversation with error message
                    message.Text = $"Failed to process payment with error: {paymentProcessingException?.Message}";
                }
                await Conversation.ResumeAsync(invoke.RelatesTo, message, token);
            }
            catch (Exception ex)
            {
                Trace.TraceError($"Failed to resume the conversation using ConversationReference: {JsonConvert.SerializeObject(invoke.RelatesTo)} and exception: {ex.Message}");
            }

            return(result);
        }