2017-05-26 10 views
6

Trong dự án Java/Spring hiện tại của tôi, tôi đang trong giai đoạn tích hợp với PayPal. Sau khi định cấu hình một lớp Java để xử lý quá trình thanh toán, hãy thực hiện theo các hướng dẫn từ here, tôi chạy ứng dụng của mình và thử thanh toán một đơn đặt hàng bằng paypal.PayPal SDK chuyển từ trang xem xét thanh toán sang profilepage

Tôi đang chuyển hướng một cách chính xác đến trang đăng nhập PayPal, và sau khi đăng nhập, trang xem lại thanh toán này:

enter image description here

nhưng sau đó sau khi tôi bấm vào "Tiếp tục", thay vì hoàn thiện việc thanh toán, Tôi được chuyển hướng đến trang hồ sơ của mình.

enter image description here

Đây là mã của tôi:

Paypal prop = this.paypalDao.get(); 
String clientId = prop.getClientID(); 
String clientSecret = prop.getClientSecret(); 
APIContext apiContext = new APIContext(clientId, clientSecret, "sandbox"); 

if(payerId != null) { 
    if(guid != null) { 
    Payment payment = new Payment(); 
    payment.setId(map.get(guid)); 

    PaymentExecution paymentExecution = new PaymentExecution(); 
    paymentExecution.setPayerId(payerId); 
    payment.execute(apiContext, paymentExecution); 

    String url = request.getContextPath(); 
    return url+"/orders"; 
    } 
} else { 
    List<Produto> lista_de_produtos = this.getListaDeProdutos(clienteId); 

    Double total = 0.0; 
    for(Produto produto : lista_de_produtos) 
    total = total + produto.getPreco(); 
    DecimalFormat df = new DecimalFormat("0.00"); 
    String svalue = df.format(total).replace(',', '.'); 

    Details details = new Details(); 
    details.setSubtotal(svalue); 

    Amount amount = new Amount(); 
    amount.setCurrency("BRL"); 
    amount.setTotal(svalue); 
    amount.setDetails(details); 

    Transaction transaction = new Transaction(); 
    transaction.setAmount(amount); 
    transaction.setDescription(lista_de_produtos.toString()); 

    List<Transaction> transactions = new ArrayList<Transaction>(); 
    transactions.add(transaction); 

    Payer payer = new Payer(); 
    payer.setPaymentMethod("paypal"); 

    Payment payment = new Payment(); 
    payment.setIntent("sale"); 
    payment.setPayer(payer); 
    payment.setTransactions(transactions); 

    RedirectUrls redirectUrls = new RedirectUrls(); 
    guid = UUID.randomUUID().toString(); 
    String url = request.getContextPath(); 
    redirectUrls.setCancelUrl(url+"/cart"); 
    redirectUrls.setReturnUrl(url+"/paypal/checkout/"+clientId+"/?guid=" + guid); 
    payment.setRedirectUrls(redirectUrls); 

    Payment createdPayment = payment.create(apiContext); 
    Iterator<Links> links = createdPayment.getLinks().iterator(); 
    while (links.hasNext()) { 
    Links link = links.next(); 
    if (link.getRel().equalsIgnoreCase("approval_url")) { 
     map.put("redirectURL", link.getHref()); 
     redirectURL = link.getHref(); 
    } 
    } 
    map.put(guid, createdPayment.getId()); 
    payment.setId(map.get(guid)); 
} 

return redirectURL; 

Ai đó có thể cho tôi biết, những gì tôi thiếu ở đây?

+1

ít nhất là ẩn các chi tiết cá nhân đó như điện thoại, id email, v.v. –

+0

request.getContextPath() trở về là gì? Nếu đây là một url tương đối (không có tên miền), thì PayPal không biết nơi gửi khách hàng trở lại. –

Trả lời

2

Thử in giá trị này:

System.out.println(url+"/paypal/checkout/"+clientId+"/?guid=" + guid); 

Kết quả sẽ được https://www.yoursite.com/paypal/checkout/<number>/?guid=<number>, hoặc một trang mà sẽ chỉ đạo ở đó (để lại ra https:// để tiết kiệm byte có thể được okay tùy thuộc vào cấu hình máy chủ của bạn).

kiểm tra bổ sung, bạn nên thử:

  1. thử hủy trên trang web của bạn.
  2. Thử hủy thanh toán trên trang web của paypal.

Iff một công trình nhưng thứ hai không, sau đó paypal không chuyển hướng đúng cách, có thể có nghĩa là bạn không cho nó chuỗi đúng. Cũng xem nhận xét của @Emile.

+0

'bỏ qua" https: // "để lưu trên byte' ...... [sai trang web?] (Https://codegolf.stackexchange.com/) LOL: P – HyperNeutrino

+0

@HyperNeutrino Một số hệ thống xử lý thanh toán chấp nhận ngắn hơn Độ dài URL được phép theo tiêu chuẩn chính thức. Ví dụ. Thay vào đó, 255 ký tự, bởi vì ngân hàng sử dụng các chuỗi cố định trên phụ trợ cũ của chúng. Những 8 byte được lưu có thể hữu ích đôi khi. Tôi đã không tìm kiếm nó cho paypal mặc dù, vì vậy nó có thể là không cần thiết. – aphid

Các vấn đề liên quan