Java-支付宝沙箱支付

支付宝沙箱支付 内网穿透 boot整合支付

支付宝沙箱配置

支付宝沙箱 操作指引:沙箱环境 - 支付宝文档中心 (alipay.com)

进入沙箱, 需要 使用 实名认证的支付宝账号

[沙箱应用] 注意 这里需要记录 APPID 及 私钥与支付宝公钥

Java-支付宝沙箱支付_第1张图片

自定义密钥:

需要安装 支付宝的密钥工具: AlipayDevelopmentAssistant-1.0.11.exe

安装后 ,双击打开, 即:

Java-支付宝沙箱支付_第2张图片

注意 [应用私钥] 的值 程序中 需要使用, [应用公钥] -在支付宝页面使用

Java-支付宝沙箱支付_第3张图片

点击[设置] 在 应用公钥的位置 ,填入 刚刚 生成的公钥 生成 支付宝 公钥, [支付宝公钥一定保存好 程序会使用]

Java-支付宝沙箱支付_第4张图片

切换为 沙箱账号, 可以看到 卖家与买家信息, 注意 ,买家的账号信息, 因为支付时 要 输入 买家信息

Java-支付宝沙箱支付_第5张图片

以上的 内容准备完毕后 , 支付宝沙箱的配置 基本完成了.

应该记录下来 5个 重要的信息

分别为

appid

网关

应用私钥

支付宝公钥

买家账号及支付密码

Springboot支付宝沙箱支付

创建 工程, 添加 jar

pom.xml

 
     
         org.springframework.boot
         spring-boot-starter-web
     
     
         org.springframework.boot
         spring-boot-starter-thymeleaf
     
     
     
         com.alipay.sdk
         alipay-sdk-java
         4.31.7.ALL
     
 ​
 
 server:
   port: 8001

编写启动类

 @SpringBootApplication
 public class App {
     public static void main(String[] args) {
         SpringApplication.run(App.class,args);
     }
 }

定义工具类: UUIDUtil .java 生成 随机数据

 package com.ly.util;
 ​
 import java.util.UUID;
 ​
 public class UUIDUtil {
     /**
      * 生成可带前后缀的唯一字符串
      * @param prefix
      * @param suffix
      * @return
      */
     public static String generateSn(String prefix,String suffix){
         return prefix + UUID.randomUUID().toString().replace("-", "").toUpperCase() + suffix;
     }
 ​
 }

编写 沙箱支付工具类

 package com.ly.util;
 ​
 import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.DefaultAlipayClient;
 import com.alipay.api.domain.AlipayDataDataserviceBillDownloadurlQueryModel;
 import com.alipay.api.internal.util.AlipaySignature;
 import com.alipay.api.request.*;
 import com.alipay.api.response.AlipayTradeOrderinfoSyncResponse;
 import com.alipay.api.response.AlipayTradePagePayResponse;
 ​
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 ​
 public class Alipay {
     /**
      * APP_ID 应用id
      */
     public final static String APP_ID ="自己的沙箱的APPID";
 ​
     /**
      * 应用私钥
      */
   public  final static String APP_PRIVATE_KEY="自己的应用私钥";
     /**
      * 编码
      */
     public final static String CHARSET ="UTF-8";
 ​
     /**
      * 支付宝公钥
      */
     public final static String ALIPAY_PUBLIC_KEY ="自己的支付宝公钥";
 ​
     /**
      * (沙箱)网关
      */
     public final static String GETEWAY_URL ="https://openapi.alipaydev.com/gateway.do";
 ​
  
     // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
     public static String notify_url = "内网穿透地址/pay/alipay_notify";
 ​
     // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    // public static String return_url = "http://mytest.free.svipss.top/list";
      public static String return_url = "内网穿透地址/list";  // 支付成功 最后一步 跳转 返回的 页面
 ​
 ​
 ​
     /**
      * 格式化
      */
     public final static String FORMAT ="json";
 ​
     /**
      * 签名类型
      */
     public final static String SIGN_TYPE ="RSA2";
 ​
     /**
      * 用户 下单后 生成 支付宝交易号
      * @param sn
      * @param info
      * @param sub
      * @param amount
      * @return
      */
     public static String genernatePCAlipayHtml(String sn,String info,String sub,BigDecimal amount)  {
         //获得初始化的AlipayClient
         AlipayClient alipayClient = new DefaultAlipayClient(GETEWAY_URL,APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET,ALIPAY_PUBLIC_KEY, SIGN_TYPE);
 ​
         //设置请求参数
         AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
         alipayRequest.setReturnUrl(return_url);
         alipayRequest.setNotifyUrl(notify_url);
 ​
         //商户订单号,商户网站订单系统中唯一订单号,必填
         String out_trade_no = sn;
         //付款金额,必填
         String total_amount = amount.toString();
         //订单名称,必填
         String subject = sub;
         //商品描述,可空
         String body = info;
 ​
         alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                 + "\"total_amount\":\""+ total_amount +"\","
                 + "\"subject\":\""+ subject +"\","
                 + "\"body\":\""+ body +"\","
                 + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
         //请求
         String result = null;
         try {
             AlipayTradePagePayResponse res = alipayClient.pageExecute(alipayRequest);
             result = res.getBody();
             System.out.println("---------支付宝pc html-------"+result);
         } catch (AlipayApiException e) {
             e.printStackTrace();
         }
 ​
      return result;
     }
    }

编写控制层:

 
package com.ly.controller;
 ​
 import com.alipay.api.AlipayApiException;
 import com.ly.util.Alipay;
 import com.ly.util.UUIDUtil;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 ​
 import java.math.BigDecimal;
 ​
 /*
   支付 控制层-- 调用沙箱支付 的 api
  */
 @Controller
 public class PayController {
 ​
     //生成支付宝 交易号
     @GetMapping("/make")
     @ResponseBody
     public String makeOrderSn() throws AlipayApiException {
 ​
         String sn = UUIDUtil.generateSn("ly","");
         // 生成支付宝 交易号
         String paysn = Alipay.genernatePCAlipayHtml(sn,"九阳热水壶","618淘宝活动", BigDecimal.valueOf(50));
         System.out.println(paysn);
 ​
 ​
         return paysn;
     }
 ​
     //生成支付宝 交易号
     @GetMapping("/list")
     @ResponseBody
     public String list() throws AlipayApiException {
 ​
         return "success";
     }
 }

, 不要访问 接下来 说 内网穿透

内网穿透

我们使用的是 飞鸽的 内网穿透的工具, 免费的隧道 可以使用 7天, 7天后 不可用了, 因此 这里 [最好让一个同学先注册] 其他都用这一个同学的, 等过期了 再换另一个同学的账号

进入到 首页飞鸽管理控制台 (fgnwct.com) 没有账号 注册账号,

然后 登录进入:

Java-支付宝沙箱支付_第6张图片

Java-支付宝沙箱支付_第7张图片

Java-支付宝沙箱支付_第8张图片

进入到 windows_amd64_client 的目录,

双击

Java-支付宝沙箱支付_第9张图片

Java-支付宝沙箱支付_第10张图片

看到 上面的内容 表示 内网穿透 成功.

Java-支付宝沙箱支付_第11张图片

mytest.free.svipss.top 他 就 代表 http://localhost:8001

修改 工具类中的

Java-支付宝沙箱支付_第12张图片

启动 测试

支付文档说明统一收单下单并支付页面接口 - 支付宝文档中心 (alipay.com)

你可能感兴趣的:(java,springboot,java,开发语言)