java 商户PC端接入支付宝支付的实现方法

用户在商户网站上完成支付一、商户申请流程和业务场景即时到账:网上交易时,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。申请条件:

1) 申请前必须拥有经过实名认证的支付宝账户;
2) 企业或个体工商户可申请;
3) 需提供真实有效的营业执照,且支付宝账户名称需与营业执照主体一致;
4) 网站能正常访问且页面显示完整,网站需要明确经营内容且有完整的商品信息;
5) 网站必须通过ICP备案。如为个体工商户,网站备案主体需要与支付宝账户主体名称一致;
6) 如为个体工商户,则团购不开放,且古玩、珠宝等奢侈品、投资类行业无法申请本产品;

使用场景:

买家选择产品

买家选择付款方式

买家选择手机扫一扫付款或 买家选择在电脑端登录账户付款

买家选择在电脑端登录账户付款,并完成交易

买家选择手机扫一扫并完成付款

查看交易记录

商户登入注册入口:https://b.alipay.com/signing/productDetail.htm?productId=I1011000290000001000#J_detailItem3
支付宝支付实例下载:https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1
支付宝支付开发者API:https://doc.open.alipay.com/docs/api.htm?docType=4&apiId=850

二、开发步骤及说明

  • 注册配置商户环境
  • 阅读开发者文档API:alipay.trade.pay (统一收单交易支付接口)

下载DEMO的java版本 -

代码结构:

1. index.jsp支付宝即时到账接口调用页面

<div class="content">
    <form action="alipayapi.jsp" class="alipayform" method="POST" target="_blank">
      <div class="element" style="margin-top:60px;">
        <div class="legend">支付宝即时到账交易接口快速通道 </div>
      </div>
      <div class="element">
        <div class="etitle">商户订单号:</div>
        <div class="einput"><input type="text" name="WIDout_trade_no" id="out_trade_no"></div>
        <br>
        <div class="mark">注意:商户订单号(out_trade_no).必填(建议是英文字母和数字,不能含有特殊字符</div>
      </div>

      <div class="element">
        <div class="etitle">商品名称:</div>
        <div class="einput"><input type="text" name="WIDsubject" value="test商品123"></div>
        <br>
        <div class="mark">注意:产品名称(subject),必填(建议中文,英文,数字,不能含有特殊字符)</div>
      </div>
      <div class="element">
        <div class="etitle">付款金额:</div>
        <div class="einput"><input type="text" name="WIDtotal_fee" value="0.01"></div>
        <br>
        <div class="mark">注意:付款金额(total_fee),必填(格式如:1.00,请精确到分)</div>
      </div>
      <div class="element">
        <div class="etitle">商品描述:</div>
        <div class="einput"><input type="text" name="WIDbody" value="即时到账测试"></div>
        <br>
        <div class="mark">注意:商品描述(body),选填(建议中文,英文,数字,不能含有特殊字符)</div>
      </div>
      <div class="element">
        <input type="submit" class="alisubmit" value ="确认支付">
      </div>
    </form>
  </div>

准备用户产品参数

点击确认:提交到alipayapi.jsp

2.alipayapi.jsp获取调用接口配置公共参数

////////////////////////////////////请求参数//////////////////////////////////////

    //商户订单号,商户网站订单系统中唯一订单号,必填
    String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");

    //订单名称,必填
    String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");

    //付款金额,必填
    String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8");

    //商品描述,可空
    String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");

    //////////////////////////////////////////////////////////////////////////////////

    //把请求参数打包成数组
    Map<String, String> sParaTemp = new HashMap<String, String>();
    sParaTemp.put("service", AlipayConfig.service);
    sParaTemp.put("partner", AlipayConfig.partner);
    sParaTemp.put("seller_id", AlipayConfig.seller_id);
    sParaTemp.put("_input_charset", AlipayConfig.input_charset);
    sParaTemp.put("payment_type", AlipayConfig.payment_type);
    sParaTemp.put("notify_url", AlipayConfig.notify_url);
    sParaTemp.put("return_url", AlipayConfig.return_url);
    sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);
    sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);
    sParaTemp.put("out_trade_no", out_trade_no);
    sParaTemp.put("subject", subject);
    sParaTemp.put("total_fee", total_fee);
    sParaTemp.put("body", body);
    //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1
    //如sParaTemp.put("参数名","参数值");
    //建立请求
    String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","确认");
    out.println(sHtmlText);

调用AlipaySubmit.buildRequest(sParaTemp,”get”,”确认”);

3.AlipaySubmit组装调用支付宝网管接口

/**
   * 建立请求,以表单HTML形式构造(默认)
   * @param sParaTemp 请求参数数组
   * @param strMethod 提交方式。两个值可选:post、get
   * @param strButtonName 确认按钮显示文字
   * @return 提交表单HTML文本
   */
  public static String buildRequest(Map<String, String> sParaTemp, String strMethod, String strButtonName) {
    //待请求参数数组
    Map<String, String> sPara = buildRequestPara(sParaTemp);
    List<String> keys = new ArrayList<String>(sPara.keySet());

    StringBuffer sbHtml = new StringBuffer();

    sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + ALIPAY_GATEWAY_NEW
           + "_input_charset=" + AlipayConfig.input_charset + "\" method=\"" + strMethod
           + "\">");

    for (int i = 0; i < keys.size(); i++) {
      String name = (String) keys.get(i);
      String value = (String) sPara.get(name);

      sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
    }

    //submit按钮控件请不要含有name属性
    sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\"></form>");
    sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");

    return sbHtml.toString();
  }

组装成隐藏form表单自动提交。

同步和异步返回页面进行对返回参数的获取和对商户本身业务逻辑处理

4.说明

public class AlipayConfig {

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  // 合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
  public static String partner = "";

  // 收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号
  public static String seller_id = partner;

  // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
  public static String key = "";

  // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
  public static String notify_url = "http://商户网址/create_direct_pay_by_user-JAVA-UTF-8/notify_url.jsp";

  // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
  public static String return_url = "http://商户网址/create_direct_pay_by_user-JAVA-UTF-8/return_url.jsp";

  // 签名方式
  public static String sign_type = "MD5";

  // 调试用,创建TXT日志文件夹路径,见AlipayCore.java类中的logResult(String sWord)打印方法。
  public static String log_path = "C:\\";

  // 字符编码格式 目前支持 gbk 或 utf-8
  public static String input_charset = "utf-8";

  // 支付类型 ,无需修改
  public static String payment_type = "1";

  // 调用的接口名,无需修改
  public static String service = "create_direct_pay_by_user";

//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

//↓↓↓↓↓↓↓↓↓↓ 请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  // 防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数
  public static String anti_phishing_key = "";

  // 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1
  public static String exter_invoke_ip = "";

//↑↑↑↑↑↑↑↑↑↑请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

}

按照说明配置

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java实现支付宝退款功能

    最近完成的差不多的项目突然需要加退款的流程需求了,所以来小小的实现以下. 其实对比其他的支付和退款来说,支付宝算是特别专业,也是特别简单的一个了. 一.引入支付宝SDK 在这里说一下,其实每种支付都会有一个官方带的SDK,我们可以把这个sdk引入到我们的项目中去,然后我们就可以调用里面的方法和对象,给里面传值,进行我们相应的请求的访问和介入. 首先引入如上图所示的jar包,然后我们就算是成功了一半了. 下载地址 然后我们需要把这个jar包引入到所需要的地方,这里不做过多的描述. 二.找到需要的资

  • java后台实现支付宝对账功能的示例代码

    完成支付宝支付.查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付.查询接口实现过程的亲们,可移步到上一篇有详细过程. 现在我们来讲一下支付宝对账的功能,关于与支付宝交互的关键代码,其实支付宝的API已经讲得很清楚,如果亲们想直接看支付宝API,点击 支付宝对账API,当然我在文章也会进行说明解释. 实现支付宝自动对账功能 先看一下商户系统和支付宝的大概交互过程: 所谓对账,其实就是调用支付宝查询接口,跟上一篇的查询接口不同的是,上一篇的查询接

  • java支付宝即时到帐提交订单功能

    本文实例为大家分享了java支付宝即时到帐提交订单的具体代码,供大家参考,具体内容如下 package com.tian.batis; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; im

  • Java实现支付宝之第三方支付宝即时到账支付功能

    alipay 的几个内核功能文件: AlipayFunction.java package com.test.util.alipay; import java.io.FileWriter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import ja

  • Java判断浏览器是微信还是支付宝

    下面一段代码给大家介绍java判断浏览器是微信还是支付宝,具体代码如下所示: @RequestMapping("getBrowser.do") public String getBrowser(HttpServletRequest req, HttpServletResponse resp) { String userAgent = req.getHeader("user-agent"); if (userAgent != null && userA

  • java版微信和支付宝退款接口

    本文实例为大家分享了java微信退款接口和支付宝退款接口的具体代码,供大家参考,具体内容如下 1.微信退款接口  相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可: /** * * 微信退款 * @param transaction_id 微信支付订单号 * @param out_refund_no 商户订单号 * @param total_fee 总金额 * @param refund_fee 退款金额 * @param op_user_id 操作人 * @ret

  • java服务器端微信、支付宝支付和退款功能

    工作需要,写了服务器端的支付和退款功能,包含微信和支付宝,网上也有很多demo可以借鉴,我把我的代码放出来,写的比较简单,有问题的欢迎指正,大家一起学习. 微信支付需要调用微信的统一下单接口,而支付宝不用. 我写的时候微信和支付宝都单独写了一个工具类,来调用支付,给前端返回需要的数据. ps:支付是可以不需要服务器端的,不过为了安全一点点,所以前端需要调起支付的字段都直接从服务器端返回,前端拿到字段直接调起支付就可以了. Map<String,String> map = new HashMap

  • java实现在SSM下使用支付宝扫码支付功能

    本文实例为大家分享了java使用支付宝扫码支付的具体代码,供大家参考,具体内容如下 准备工作 首先开通支付宝沙箱的测试账号,里面会有消费者账户和收款方账户 手机扫码下载手机端app 基础配置 所需jar包 AlipayConfig package com.alipay.config; import java.io.FileWriter; import java.io.IOException; import java.util.ResourceBundle; /* * *类名:AlipayConf

  • java 商户PC端接入支付宝支付的实现方法

    用户在商户网站上完成支付一.商户申请流程和业务场景即时到账:网上交易时,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金.申请条件: 1) 申请前必须拥有经过实名认证的支付宝账户: 2) 企业或个体工商户可申请: 3) 需提供真实有效的营业执照,且支付宝账户名称需与营业执照主体一致: 4) 网站能正常访问且页面显示完整,网站需要明确经营内容且有完整的商品信息: 5) 网站必须通过ICP备案.如为个体工商户,网站备案主体需要与支付宝账户主体名称一致: 6) 如为个体工商户,则团购不开放,且古

  • React Native集成支付宝支付的实现方法

    在RN应用开发过程中,集成支付宝和微信支付除了直接使用第三方的插件之,比如:react-native-yunpeng-alipay,我们还可以借助RN提供的NativeModules调用原生模块来实现支付.NativeModules是JS代码调用原生模块的桥梁.所以,我们只需要在原生工程中集成支付宝和微信支付的sdk,然后使用NativeModules调用即可. 首先,我们去支付宝官网下载支付宝SDK,下载对应的Android版本. 然后,将aar文件放入android/app/libs 文件夹

  • vue移动端使用appClound拉起支付宝支付的实现方法

    1-首先在config.xml中进行配置 <feature name="aliPay"> <param name="urlScheme" value="AliPayA000000000" /> </feature> 2-在自己的应用中添加支付宝支付的模块 3.使用支付宝模块进行拉起支付宝 if (res.data.code == 200) { // 拉起支付宝 //开发者通过 payOrder 方法来进行支付,

  • java对接支付宝支付项目的实战记录

    目录 java对接支付宝支付演示 成功演示图 讲解一下实际支付的时候所需要的参数吧 总结 java对接支付宝支付演示 现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付 废话不多说 上代码 引入支付宝官方的sdk <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk --> <dependency> <groupId>com.alipay.sdk</groupI

  • java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)

    最近项目APP需要接入微信.支付宝支付功能,在分配开发任务时,听说微信支付接口比支付宝支付接口要难实现,由于我开发经验不是那么丰富(现工作经验1年半)且未接触过支付接口开发,组里刚好又有支付接口的老司机,所以很自然把简单的支付宝接口开发任务交给了我,看来开发组的组长还是很好人的嘛.....,废话就不多说了,我们开始吧! 实现支付宝接口详细过程 1.去支付宝官网申请公司企业账号并开通一个应用,在应用里签约APP支付功能 具体的申请截图步骤,在这里我就不详细说了,因为这不是文章的重点,可参考支付宝官

  • java实现支付宝支付接口的调用

    目录 1.准备工作 2.获取Demo (JAVA版) 3.导入本地运行测试 1.准备工作 第一步就是先要注册一个支付宝的账号(注册这里不说,不是重点),然后登入官方首页,去到应用列表里面找到沙箱应用.基本信息的APPID很重要,后续配置文件要配置的app_id就是这个. 系统密钥,查看公钥模式,merchant_private_key就是应用私钥:alipay_public_key支付宝公钥:支付宝网关地址https://openapi.alipaydev.com/gateway.do因为是沙箱

  • 详解java集成支付宝支付接口(JSP+支付宝20160912)

    吐槽一下: 支付宝的接口和微信的DEMO和文档真心太难看懂了,乱七八糟,都不知道去哪里找自己要的东西,最近几天我们公司需要做类似的开发,我作为先锋,率先解决Java集成支付宝支付和微信支付接口工作. 我们的工作环境:JSP网站+支付接口,目前工作的支付宝接口为20160912,微信为V3版本,如遇到版本升级,请联系相关机构的客户服务人员升级. 本文介绍JSP+支付宝接口,本文非原创. 新手注意: 1.本文使用的接口地址和参数为沙箱的地址,无论你在使用沙箱或者正式地址,务必核实使用接口地址和参数,

  • Java如何在沙箱环境中测试支付宝支付接口

    java沙箱环境测试支付宝支付接口? 准备工作,登陆支付宝开放平台,进入沙箱环境 开放平台链接:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr 下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,

  • Java spring boot 实现支付宝支付功能的示例代码

    一.准备工作: 1.登陆支付宝开发者中心,申请一个开发者账号. 地址:https://openhome.alipay.com/ 2.进入研发服务: 3.点击链接进入工具下载页面: 4.点击下载对应版本的RSA公钥生成器: 5.生成公钥密钥(记录你的应用私钥): 6.在支付宝配置公钥(点击保存): 二.搭建demo 1.引入jia包: <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alip

  • Java 实现微信和支付宝支付功能

    一.前期准备 1.申请好微信商户号appid,拿到商户id和商户秘钥,退款的话需要商户证书 2.申请好支付宝商户号appid,商户公钥和秘钥(需要用支付宝工具自己生成),支付宝退款不需要证书 二.数据库表设计 1.微信支付配置表 CREATE TABLE `py_wx_config` ( `wx_config_id` varchar(18) NOT NULL COMMENT '微信支付配置ID', `appid` varchar(128) DEFAULT NULL COMMENT '微信公众号I

随机推荐