Maintenant, de nombreux projets nécessitent un paiement Docking. Ici, nous expliquons principalement le paiement Docking Alipay H5
Plus de bêtises, parlons du code
Présentation du SDK officiel d'Alipay.
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-easysdk</artifactId> <version>2.2.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.10.124.ALL</version> </dependency>
Écrivez une méthode pour appeler le paiement
@RequestMapping("/test") public void doPost(HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws ServletException, IOException { //商户号 String APP_ID=""; //私钥 String APP_PRIVATE_KEY=""; //编码 String CHARSET="UTF-8"; //公钥 String ALIPAY_PUBLIC_KEY=""; //我是沙箱环境 所有请求地址是沙箱版 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //获得初始化的AlipayClient AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request //这里主要是设置回调 也就是支付成功之后你要做什么操作的地址 alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp"); alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址 /** * @description: * @author: hwk * @date: 2022/6/14 16:34 * @param: out_trade_no 订单编号 * total_amount 付款金额 * subject 商品名称 * product_code 支付方式 如手机网站 pc网站 APP支付等 **/ JSONObject jsonObject = new JSONObject(); jsonObject.put("out_trade_no", "264484811515156"); jsonObject.put("total_amount", "66"); jsonObject.put("subject", "测试支付"); jsonObject.put("product_code", "QUICK_WAP_WAY"); alipayRequest.setBizContent(jsonObject.toJSONString()); String form=""; try { form = alipayClient.pageExecute(alipayRequest).getBody(); } catch (AlipayApiException e) { e.printStackTrace(); } //因为我不会写前端 所以直接输出测试 如果在正式环境中 建议直接return 返回的from表单 httpResponse.setContentType("text/html;charset=" + CHARSET); httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面 httpResponse.getWriter().flush(); httpResponse.getWriter().close(); } //支付回调 @RequestMapping("/test1") public void aliPayNotify() { Map<String, String> params = getAllRequestParam(request); String tradeStatus = params.get("trade_status"); if ("TRADE_SUCCESS".equals(tradeStatus)) { System.out.println("支付成功"); }else { System.out.println("支付失败"); } } private Map<String, String> getAllRequestParam(final HttpServletRequest request) { Map<String, String> res = new HashMap<>(8); Enumeration<?> temp = request.getParameterNames(); while (temp.hasMoreElements()) { String en = (String) temp.nextElement(); String value = request.getParameter(en); res.put(en, value); } return res; }
Vous pouvez utiliser la chaîne json pour recevoir le paiement officiel. Voici juste une démonstration
Sauf la clé publique et la clé privée de l'appid
Les paramètres dont vous avez besoin pour le paiement normal ne sont rien de plus que l'ID du produit (principalement utilisé pour interroger le nom et le prix du produit en fonction de l'ID du produit et autres appels ultérieurs pour payer) (si nécessaire), l'acheteur
interroge ensuite les détails du produit et les définit dans les paramètres correspondants pour appeler le SDK Alipay afin de générer le formulaire from
Vous pouvez effectuer certaines opérations après un paiement réussi dans le rappel
Par exemple : Ce que vous achetez est un abonnement, puis une fois le paiement réussi, allez activer ou renouveler l'abonnement pour lui
Une chose pour vous rappeler que la commande créée avant de lancer le paiement doit être impayée . Dans le rappel, il est jugé si l'utilisateur a réussi
S'il y en a. Il est recommandé à l'utilisateur de vérifier activement si le paiement a réussi en fonction du numéro de commande. Accédez d'abord à la base de données pour vérifier si le paiement est effectué. Si ce n'est pas le cas, rendez-vous sur l'interface officielle pour vérifier si le paiement est réussi. L'avantage est que parfois le rappel est un peu plus lent. L'utilisateur prend l'initiative de vérifier si le paiement est réussi. échec de paiement à retourner
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!