- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi muốn xây dựng một ứng dụng nơi người dùng có thể mua sản phẩm từ trang web của tôi. Giao dịch mua sẽ bao gồm mặt hàng thực tế mà họ đang mua, phí vận chuyển, thuế (nếu có), v.v. Tôi biết PayPal có nhiều tùy chọn thanh toán, một trong số đó là dịch vụ web và tùy chọn còn lại chỉ chuyển hướng đến trang web của họ. Tôi muốn trải nghiệm người dùng liền mạch nhất có thể, nhưng tôi không muốn tham gia vào công việc lưu trữ thẻ tín dụng, v.v.
Nếu tôi xử lý các giao dịch trên máy chủ của mình (sử dụng kết nối an toàn/SSL), tôi có gặp rủi ro khi chuyển thông tin thẻ tín dụng đến dịch vụ của họ để xử lý không?
câu trả lời hay nhất
Chúc bạn vui vẻ! Framework v1.2 hỗ trợ tuyệt vời cho WebServices. Play không có mô-đun paypal nhưng việc viết mã không phức tạp. Tôi đã triển khai giải pháp dịch vụ web cho trang web tuyển dụng của chúng tôi (www.express-board.fr) trong 3 ngày.
Đầu tiên: người dùng luôn được chuyển hướng đến trang web Paypal. Không có giải pháp nào cho khách hàng paypal. Nếu bạn chọn giải pháp dịch vụ web (developer.paypal.com), bạn có thể tùy chỉnh trang web paypal bằng logo của mình. Không phải là giải pháp tốt nhất, nhưng nó hoạt động.
Về phía Play, đây là mã mẫu cho phương thức thanh toán bằng Dịch vụ web Paypal:
kiểm tra khoảng trống tĩnh công khai () {
Số tiền gấp đôi = Double.parseDouble(session.get("amount"));
UserId dài = Long.parseLong(session.get("user-id"));
Người dùng người dùng = User.findById(userId);
nếu (người dùng != null) {
renderArgs.put("người dùng", người dùng);
}
// chúng tôi tính toán số tiền ròng và tổng cộng với VAT của Pháp (19,6%)
Số tiền BigDecimalBD = BigDecimal mới (số tiền * 1,196);
BigDecimal netAmountBD = BigDecimal mới(số tiền);
BigDecimal taxAmountBD = số tiềnBD.subtract(netAmountBD);
Chuỗi netAmount = netAmountBD.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
Chuỗi TotalAmount = moneyBD.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
Chuỗi taxAmount = taxAmountBD.setScale(2, BigDecimal.ROUND_HALF_EVEN).toString();
Chuỗi chủ đề="Ấn bản d'une offre d'emploi";
// Lệnh gọi lại dịch vụ web Paypal được thực hiện bởi Play!
// Tôi có thuộc tính cấu hình paypal.api.server với máy chủ prod và sandbox
WS.HttpResponse res = WS.url(Play.configuration.get("paypal.api.server").toString() +
"&NGƯỜI DÙNG=%s" +
"&PWD=%s" +
"&CHỮ KÝ=%s" +
"&VERSION=%s" +
"&PHƯƠNG PHÁP=%s" +
"&PAYMENTREQUEST_0_PAYMENTACTION=%s" +
"&LANDINGPAGE=%s" +
"&SOLUTIONTYPE=%s" +
"&EMAIL=%s" +
"&FIRSTNAME=%s" +
"&LASTNAME=%s" +
"&ĐƯỜNG=%s" +
"&STREET2=%s" +
"&THÀNH PHỐ=%s" +
"&ZIP=%s" +
"&STATE=%s" +
"&PAYMENTREQUEST_0_CURRENCYCODE=%s" +
"&MAXAMT=%s" +
"&PAYMENTREQUEST_0_AMT=%s" +
"&PAYMENTREQUEST_0_ITEMAMT=%s" +
"&PAYMENTREQUEST_0_TAXAMT=%s" +
"&PAYMENTREQUEST_0_DESC=%s" +
"&L_PAYMENTREQUEST_0_NAME0=%s" +
"&L_PAYMENTREQUEST_0_NUMER0=%s" +
"&L_PAYMENTREQUEST_0_DESC0=%s" +
"&L_PAYMENTREQUEST_0_AMT0=%s" +
"&L_PAYMENTREQUEST_0_QTY0=%s" +
"&NOSHIPPING=%s" +
"&LOCALECODE=%s" +
"&RETURNURL=%s" +
"&CANCELURL=%s" +
"&ADDROVERRIDE=%s" +
"&BRANDNAME=%s"
,
//-------
Play.configuration.get("paypal.api.username").toString(),
Play.configuration.get("paypal.api.password").toString(),
Play.configuration.get("paypal.api.signature").toString(),
"69.0", // Phiên bản API
"SetExpressCheckout", //Phương thức
"Doanh thu",
"Thanh toán",
"Duy nhất",
người dùng.email,
"" + tên người dùng.fullname,
"" + tên người dùng.fullname,
"" + user.postalAddress,
"" + user.postalAddress2,
"" + user.city,
"" + user.zip,
"Không có",
"EUR",
tổng số tiền, //MaxAMT
totalAmount, //amount.toString()
netAmount, //PAYMENTREQUEST_n_ITEMAMT
taxAmount,
subject,
//---------
"Item name",
"1",
subject,
netAmount,
"1",
//---------
"1",
"FR",
Play.configuration.get("paypal.returnUrl").toString(),
Play.configuration.get("paypal.cancelPay").toString(),
"1", //ADDROVERRIDE
"eXpress-Board pour Innoteria"
).get();
String message = res.getString();
PaypalResponse paypalResponse = new PaypalResponse(message);
if (paypalResponse.isSuccess()) {
Payment payment = new Payment();
payment.userId = user.id;
payment.totalAmount = totalAmount;
payment.netAmount = netAmount;
payment.taxAmount = taxAmount;
payment.token = paypalResponse.getToken();
payment.correlationID = paypalResponse.getCorrelationID();
payment.save();
redirect(Play.configuration.get("paypal.api.http").toString() + "/cgi-bin/webscr?cmd=_express-checkout&token=" + paypalResponse.getToken());
}
Logger.error("Error on SetExpressCheckout with: ");
for (String tokens : message.split("&")) {
thử {
Logger.error(URLDecoder.decode(tokens, "UTF-8"));
} catch (UnsupportedEncodingException e) {
}
}
error("Error from Paypal");
}
Hy vọng nó sẽ giúp bạn
关于java - 玩!框架支付处理(电子商务/ Paypal ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982894/
我正在尝试创建一个数据库来处理我在 Play 中的任务!框架。 这是我所拥有的: 在build.sbt中: libraryDependencies ++= Seq( jdbc, cache,
在我的游戏中定义一个表单!当编译器吐出这个奇怪的错误时 Controller :重载方法值映射与替代:...[一堆废话]...Error occurred in an application invo
我的应用程序有问题,@Max约束注释。 我的 Controller 方法定义如下: public static void save(@Required @Max(255) String content
我想创建一个像这样的标签: #{some_tag entity:user, field:'name'} 并期望它通过使用如下表达式生成带有用户名的输出: ${_entity._field} 我知道这行
我创建了一些 Model 对象来代表一家拥有多个客户的公司,以及一个由公司和客户组合以及多个发票行组成的发票对象。我创建了以下模型对象: @Entity public class Company ex
Playframework 现在是 typesafe-stack 的一部分。 那么,如果我要使用像主要语言一样的 Scala ,我现在应该下载什么? TypsafeStack 还是 PlayFrame
在玩!如果你这样称呼: void method() { User u = User(); u.name = "bob"; u.save(); while(true){/* endless loop *
我正在 Play 中构建一个应用程序!包含大量我想跟踪更改的数据的框架。在企业解决方案中,我可能会使用数据库触发器将更改复制到历史表中以跟踪这些更改。我不熟悉 Play!/JPA 中的类似范例,但也许
我一直在学习JavaScript技能,但是遇到一个问题,当单击此处是我的代码时,音频没有被播放。 Your browser does no
我想实现在某些模型保存后在表中插入一行的行为。我当前的解决方案简而言之是:(这只是我的代码示例,因此请不要评论数据库或描述符模型的正确性)。 我有一个监听器,用于在更新/插入实体上插入行为行 Desc
如何使我的模型类字段独一无二?例如。如果已经登录,我想为用户显示正确的消息。我必须自己编写验证检查并使用它,或者可以使用 JPA @UniqueConstraint? 最佳答案 我是这样做的: @En
我使用的是 Play 1.2.1。我想对我的用户密码进行哈希处理。我认为 Crypto.passwordHash 会很好,但事实并非如此。 passwordHash 文档说它返回 MD5 密码哈希值。
我一直在研究戏剧!框架模块并希望扩展它,添加一些功能。我发现了一个从Enhancer(play.classloading.enhancers.Enhancer)扩展的类,但不明白为什么Play!采用了
Tôi đang sử dụng Play Framework 1.2.5. Tôi có một số xác thực liên quan đến các trường NAme và Age. Xác minh độ tuổi không hoạt động đúng. Dù trên 18 tuổi vẫn nhận được thông báo lỗi. Sau đây là thử nghiệm trong phương pháp hành động
Tôi đang sử dụng Play Framework 1.2.5. Sự khác biệt giữa hai cái này là gì: @{Application.render()} và @Application.render() Cái đầu tiên được sử dụng tốt nhất ở dạng Hành động
Tôi mới ở đây! Tôi bị mắc kẹt với một số biểu mẫu luôn có lỗi. Mặc dù tất cả các trường đều được điền nhưng tôi không thể hiểu được vấn đề là gì. Tuyến GET /products/controls.Pr
Tôi hiển thị danh sách các hàng trong bảng cơ sở dữ liệu có thể chỉnh sửa. Tôi muốn cho phép người dùng chỉnh sửa dữ liệu trong bảng được hiển thị và lưu tất cả các bản cập nhật cùng một lúc. Làm cách nào để lấy lại danh sách Bộ điều khiển đã cập nhật? Câu trả lời hay nhất là vì Play có thể bị ràng buộc với POJO nên nó cũng có thể
Vì vậy, giả sử tôi bắt đầu một công việc không đồng bộ từ Bộ điều khiển và hiển thị một số mẫu. MyJob job = new MyJob(); job.doJob(); Công việc của tôi trông như sau: import p
Play Framework hiện tại được sử dụng là 2.0.4. Khi tôi cố nâng cấp lên 2.6.21 bằng lệnh này: addSbtPlugin("com.typesafe.play"% "sbt-plugin"%
Tôi hiện đang làm việc với khung Play! và có vẻ như việc ghi nhật ký chỉ hoạt động đối với các trò chơi! Chỉ nhưng không hoạt động đối với các lớp đã khởi tạo LOGGER. Đây là logback.xml ${application.hom
Tôi là một lập trình viên xuất sắc, rất giỏi!