如何给自己的项目加上域名,在浏览器中被别人访问,使用支付宝进行沙箱支付

一、给项目加上域名,

1.点击下面链接,进行注册,登录,实名认证等操作

NATAPP-内网穿透 基于ngrok的国内高速内网映射工具

2.登录完成后,点击购买隧道,购买免费隧道

每个人可以申请两条隧道,建议选择一条web和一条tcp隧道

3.购买成功后点击右上角的客户端下载,选择自己对应的操作系统,下载解压

4.下载后解压打开 输入natapp -authtoken 你的NETAPP上的隧道authtoken

这个就是网络地址

访问时在用网络地址替换本地地址就行了(访问的时候一定要把这个窗口打开)

以前

localhost/front/page/login.html

现在

 http://g3zjqu.natappfree.cc/front/page/login.html

二、使用支付宝接口进行沙箱支付

1.搜索点击支付宝,开发者,控制台,沙箱,或直接点击下面链接

登录 - 支付宝

 

2.像这样一样配置

配置:应用网关地址的链接  https://openapi.alipaydev.com/gateway.do

第一次使用需要加载几分钟,基本信息显示的慢

3.在项目中进行配置

3.1 导入pom坐标

        <!--阿里支付-->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-easysdk</artifactId>
            <version>2.0.2</version>
        </dependency>

3.2 在application.yml文件中进行相关配置

server:
  port: 80
alipay:
  #支付宝中应用唯一标识
  appId: 
  #应用私钥
  privateKey: 
  #支付宝公钥
  publicKey: 
  #网关:固定不改
  gateway: openapi.alipaydev.com
  #支付成功后,支付宝会往配置的returnUrl对应的页面进行跳转  -- 支付成功后的回跳页面
  returnUrl:  http://2kipe6.natappfree.cc/return.html

  #支付成功的支付宝回调接口:通常在回调接口中完成支付成功后的业务逻辑操作,比如: 修改订单状态
  notifyUrl:  http://2kipe6.natappfree.cc/pay/fallback

 应用私钥和支付宝公钥在查看里面

配置application.yml时需注意空格,域名每一次是经常变动的,需要及时修改

3.3 添加配置类


/**
 *  项目初始化
 * @date 2020-09-08
 * */
@Component
public class AliPayConfig implements ApplicationRunner {

    //应用id
    @Value("${alipay.appId}")
    private String appId;

    //私钥
    @Value("${alipay.privateKey}")
    private String privateKey;

    //公钥
    @Value("${alipay.publicKey}")
    private String publicKey;

    //支付宝网关
    @Value("${alipay.gateway}")
    private String gateway;

    //支付成功后的接口回调地址,不是回调的友好页面,不要弄混了
    @Value("${alipay.notifyUrl}")
    private String notifyUrl;

    /**
     *  项目初始化事件
     * */
    @Override
    public void run(ApplicationArguments args) throws Exception {
        //初始化支付宝SDK
        Factory.setOptions(getOptions());
        System.out.println("**********支付宝SDK初始化完成**********");
    }

    private Config getOptions() {
        //这里省略了一些不必要的配置,可参考文档的说明

        Config config = new Config();
        config.protocol = "https";
        config.gatewayHost = this.gateway;
        config.signType = "RSA2";

        config.appId = this.appId;

        // 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
        config.merchantPrivateKey = this.privateKey;

        //注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
        config.alipayPublicKey = this.publicKey;

        //可设置异步通知接收服务地址(可选)
        config.notifyUrl = notifyUrl;

        return config;
    }
}

3.4 在使用的时候发送请求调用就行了


@Slf4j
@RestController
@RequestMapping("/pay")
public class PayController {

    @Value("${alipay.returnUrl}")
    private String returnUrl;
    @Autowired
    private OrdersService ordersService;

    //get  http://localhost:8080/pay/confirm?id=undefined
    @GetMapping("/confirm")
    public Object pay(Long id) throws Exception {
        log.info("订单号为{}",id);

        //根据订单id查询订单详情
        Orders orders = ordersService.getById(id);
        //生成订单名称
        String orderName="订单号:"+id+"收货人:"+orders.getConsignee();


        //调用sdk,发起支付
        AlipayTradePagePayResponse response = Factory.Payment
                //选择网页支付平台
                .Page()
                //调用支付方法,设置订单名称、我们自己系统中的订单号、金额、回调页面

                .pay(orderName ,          //订单名称
                       id.toString(),   //订单号
                        orders.getAmount().toString() ,  //金额
                        returnUrl);

        //这里的response.body,就是一个可以直接加载的html片段,
        // 这里为了简单我直接返回这个片段,前端直接
        return response.body;

    }

    @PostMapping("/fallback")
    public void fallback(HttpServletRequest request){
        Map map = request.getParameterMap();
        //取出订单号
        String[] numbers = (String[]) map.get("out_trade_no");
        String number = numbers[0];
        //根据订单号查询订单详情
        Orders order = ordersService.getById(number);
        log.info("--------------------------订单:"+number+"支付成功,进入了回调---------------------------");
        //修改订单状态
        order.setStatus(2);     // 1: 待付款   2:待派送
        ordersService.updateById(order);
    }


}

4.使用的过程中使用沙箱账号登录支付,记得充钱(虚拟的)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SSM的Maven项目加入支付宝沙箱支付,可以按照以下步骤进行操作: 1. 注册支付宝开发者账号,并创建应用:首先,你需要注册一个支付宝开发者账号(https://open.alipay.com),然后创建一个应用,获取对应的AppID、支付宝公钥和私钥等信息。 2. 导入Alipay SDK:在你的Maven项目,添加Alipay SDK的依赖。你可以在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.7.110.ALL</version> </dependency> ``` 3. 配置支付宝参数:在项目的配置文件,配置支付宝的相关参数。你可以在`src/main/resources`目录下创建一个名为`alipay.properties`的文件,并添加以下内容: ``` alipay.appId=你的AppID alipay.gatewayUrl=https://openapi.alipaydev.com/gateway.do alipay.signType=RSA2 alipay.charset=UTF-8 alipay.format=json alipay.publicKey=支付宝公钥 alipay.privateKey=商户私钥 ``` 注意替换`你的AppID`、`支付宝公钥`和`商户私钥`为你自己的实际值。 4. 创建支付服务类:在项目创建一个支付服务类,用于处理支付相关的逻辑。你可以参考以下代码示例: ```java import java.util.Map; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.response.AlipayTradePagePayResponse; public class AlipayService { private AlipayClient alipayClient; public AlipayService() { alipayClient = new DefaultAlipayClient( ConfigUtil.getProperty("alipay.gatewayUrl"), ConfigUtil.getProperty("alipay.appId"), ConfigUtil.getProperty("alipay.privateKey"), "json", ConfigUtil.getProperty("alipay.charset"), ConfigUtil.getProperty("alipay.publicKey"), ConfigUtil.getProperty("alipay.signType") ); } public String createOrder(String outTradeNo, String totalAmount, String subject, String returnUrl) throws AlipayApiException { AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); request.setReturnUrl(returnUrl); request.setNotifyUrl(ConfigUtil.getProperty("alipay.notifyUrl")); request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\"," + "\"total_amount\":\"" + totalAmount + "\"," + "\"subject\":\"" + subject + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); AlipayTradePagePayResponse response = alipayClient.pageExecute(request); if (response.isSuccess()) { return response.getBody(); } else { throw new AlipayApiException(response.getSubMsg()); } } public boolean verifyCallback(Map<String, String> params) throws AlipayApiException { return alipayClient.verify(params); } } ``` 这里的`ConfigUtil`是一个读取配置文件的工具类,你可以自己实现或使用第三方库。 5. 创建支付页面:在你的项目创建一个支付页面,用于展示支付宝支付的界面。这个页面可以包含一个表单,用户填写支付相关信息。提交表单后,调用支付服务类的`createOrder`方法生成支付链接,并跳转到支付宝页面。 这样,你就可以在SSM的Maven项目加入支付宝沙箱支付了。记得在开发环境使用沙箱环境,确保支付功能正常后再切换到生产环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值