GVKun编程网logo

thinkPHP框架对接支付宝即时到账接口回调操作示例(支付宝即时到账支付接口)

17

在本文中,我们将为您详细介绍thinkPHP框架对接支付宝即时到账接口回调操作示例的相关知识,并且为您解答关于支付宝即时到账支付接口的疑问,此外,我们还会提供一些关于3.4版,支付宝即时到账积分不到账

在本文中,我们将为您详细介绍thinkPHP框架对接支付宝即时到账接口回调操作示例的相关知识,并且为您解答关于支付宝即时到账支付接口的疑问,此外,我们还会提供一些关于3.4版,支付宝即时到账积分不到账、java 接支付宝及时到账接口,有朋友接过吗?、Java如何集成第三方即时到账接口 - 支付宝、Payment:支付宝即时到账接口接入教程的有用信息。

本文目录一览:

thinkPHP框架对接支付宝即时到账接口回调操作示例(支付宝即时到账支付接口)

thinkPHP框架对接支付宝即时到账接口回调操作示例(支付宝即时到账支付接口)

本文实例讲述了thinkPHP框架对接支付宝即时到账接口回调操作。分享给大家供大家参考,具体如下:

关于支付宝即时收款接口的对接过程,很简单,也有很多人发过,我这里就不在啰嗦了,对接完成后,在线支付成功后的回调,相对来说,是个难点,,我重点分享下我的经验。

我在开发二代旅游CMS(http://www.erdaicms.com)的时候,在回调的时候,也花了不少时间。

不管是支付宝接口好是微信支付接口,回调都分为跳转回调和异步通知回调,跳转回调是不保险的,加入客人支付完成后马上把支付页面关闭,没跳转,就通知不到你这个订单已经支付了,所以我们要用异步通知回调:

代码如下:
PHP/Index-alipay_notify_url.html";

首先设置介绍异步回调的地址

异步回调的具体处理函数,我这里也贴处理,供参考:

where(array('name'=>'alipay'))->find(); $info=json_decode($info['content'],true);; //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ //合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm $alipay_config['partner'] = $info['alipay_pid']; //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号 $alipay_config['seller_id'] = $info['alipay_pid']; // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm $alipay_config['key'] = $info['alipay_key']; $ss=S('config'); // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 $alipay_config['notify_url'] = "".$ss['web_url']."/v.PHP/Index-alipay_notify_url.html"; // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 $alipay_config['return_url'] = "".$ss['web_url']."/member.PHP"; //签名方式 $alipay_config['sign_type'] = strtoupper('MD5'); //字符编码格式 目前支持 gbk 或 utf-8 $alipay_config['input_charset']= strtolower('utf-8'); //ca证书路径地址,用于curl中ssl校验 //请保证cacert.pem文件在当前文件夹目录中 $alipay_config['cacert'] = getcwd().'\\cacert.pem'; //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http $alipay_config['transport'] = 'http'; // 支付类型 ,无需修改 $alipay_config['payment_type'] = "1"; // 产品类型,无需修改 $alipay_config['service'] = "create_direct_pay_by_user"; //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ //↓↓↓↓↓↓↓↓↓↓ 请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // 防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数 $alipay_config['anti_phishing_key'] = ""; // 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1 $alipay_config['exter_invoke_ip'] = ""; $alipayNotify = new \AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyNotify(); if($verify_result) {//验证成功 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //商户订单号 $out_Trade_no = $_POST['out_Trade_no']; //支付宝交易号 $Trade_no = $_POST['Trade_no']; //交易状态 $Trade_status = $_POST['Trade_status']; $total_fee=$_POST['total_fee']; //if( $info['alipay_pid']!=$seller_id) return ''; //收款账户不一致 $info=M('order')->where(array('no'=>$out_Trade_no))->find(); if(!$info) return ''; //订单号不存在 if($_POST['Trade_status'] == 'TradE_FINISHED') { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_Trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的 //如果有做过处理,不执行商户的业务程序 $data=''; $data['status']=2; $data['pay_price']=$total_fee; $data['pay_type']='支付宝'; $data['buyer']=$_POST['buyer_email']; $data['Trade_no']=$Trade_no; $data['pay_time']=time(); M('order')->where(array('no'=>$out_Trade_no))->save($data); $c=M('smtp_templates')->where(array('id'=>5))->find(); if($c['status']==1) { $content = str_replace('{title}',$info['goods_name'],$c['content']); $content = str_replace('{id}',$info['goods_id'],$content); $content = str_replace('{price}',$total_fee,$content); $content = str_replace('{time}',date('Y-m-d H:i:s',time()),$content); $c=M('email_note')->where(array('pay_id'=>$out_Trade_no))->find(); if(!$c) { $e=''; $e['email']=$info['c_email']; $e['content']=$content; $e['pay_id']=$out_Trade_no; M('email_note')->add($e); $m=explode('|',$c['ather']); foreach($m as $mail) { if(validate_email($mail)) { $e['email']=$mail; M('email_note')->add($e); } } } } //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } else if ($_POST['Trade_status'] == 'TradE_SUCCESS') { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_Trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的 //如果有做过处理,不执行商户的业务程序 $data=''; $data['status']=2; $data['pay_price']=$total_fee; $data['pay_type']='支付宝'; $data['buyer']=$_POST['buyer_email']; $data['Trade_no']=$Trade_no; $data['pay_time']=time(); M('order')->where(array('no'=>$out_Trade_no))->save($data); $c=M('smtp_templates')->where(array('id'=>5))->find(); if($c['status']==1) { $content = str_replace('{title}',$c['ather']); foreach($m as $mail) { if(validate_email($mail)) { $e['email']=$mail; M('email_note')->add($e); } } } } //注意: //付款完成后,支付宝系统发送该交易状态通知 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— echo "success"; //请不要修改或删除 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { //验证失败 echo "fail"; //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } }

因为是异步通知,所以调试是个麻烦事,不能所见即所得,也就是说,一般情况下没办法echo或者print_r打印输出结果,没办法知道他执行到哪里或者执行结果,这个时候,我们就用到log文件输出,代码:

rush:PHP;"> $file = './log.txt';//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个 $content = "支付成功".$bdata['total_fee']."\n"; //要写入的内容 file_put_contents($file,$content,FILE_APPEND);//写入文件

以上代码会在根目录下自动生成一个log.txt的文件,这样,就可以轻松知道执行结果,方便调试了

支付宝的异步通知接口,会多次通知,直到你返回success为止,也就是说,你提交一个测试订单,可以测试很多次,因为你没有返回success的话,他会每隔一定时间,通知一次

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

3.4版,支付宝即时到账积分不到账

3.4版,支付宝即时到账积分不到账

dz3.4版,支付宝即时到账付款成功后积分不到账(需要人工补单),购买邀请码也不发送到邮箱(邮箱发送功能正常)

java 接支付宝及时到账接口,有朋友接过吗?

java 接支付宝及时到账接口,有朋友接过吗?

今天刚接到老板通知,要用支付宝即时到帐接口,文档我下载了,好家伙写了那么多,罗里吧嗦的,有哪位朋友对接过呢,指点下。qq:1014038483

Java如何集成第三方即时到账接口 - 支付宝

Java如何集成第三方即时到账接口 - 支付宝

最近朋友公司支付需要集成Java版支付宝第三方支付即时到账功能,但是他对支付宝方面接口文档不是很了解,因此帮他整理了相关的资料,解决java集成支付宝接口的一系列问题等。工作环境就是JavaEE网站增加支付宝接口,目前最新版本为alipay.trade.wap.pay-java-utf-8,如果遇到版本升级问题,可以留言咨询。


Java集成支付宝步骤:

下载手机网站支付SDK&Demo,下载地址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.ggALEe&treeId=203&articleId=105910&docType=1,注意下载JAVA版,该项目是参考项目demo,运行环境需要支持jdk1.5及以上。下载完成后解压并将项目导入eclipse中,即可。


需要公司注册支付宝,提供合作者身份ID和安全校验码KEY此为前提,否则就没有必要继续往下看了。

支付宝需使用的Jar包如下:

alipay-sdk-java20170307171631-source.jar

alipay-sdk-java20170307171631.jar

commons-logging-1.1.1-sources.jar

commons-logging-1.1.1.jar

如果存在logging相应jar包,就不用将其放入lib目录下。


alipay 的几个内核功能文件,具体如下:

AlipayConfig.java

package com.alipay.config;


public class AlipayConfig {

    // 商户appid

    public static String APPID = "";

    // 私钥 pkcs8格式的

    public static String RSA_PRIVATE_KEY = "";

    // 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问

    public static String notify_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/notify_url.jsp";

    // 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,

    //必须外网可以正常访问 商户可以自定义同步跳转地址

    public static String return_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/return_url.jsp";

    // 请求网关地址

    public static String URL = "https://openapi.alipay.com/gateway.do";

    // 编码

    public static String CHARSET = "UTF-8";

    // 返回格式

    public static String FORMAT = "json";

    // 支付宝公钥

    public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAA

    OCAQ8AMIIBCgKCAQEAjrEVFMOSiNJXaRNKicQuQdsREraftDA9Tua3WNZwcpeXeh8Wrt+V9JilLqSa7N7sV

    qwpvv8zWChgXhX/A96hEg97Oxe6GKUmzaZRNh0cZZ88vpkn5tlgL4mH/dhSr3Ip00kvM4rHq9PwuT4k7z1Dp

    ZAf1eghK8Q5BgxL88d0X07m9X96Ijd0yMkXArzD7jg+noqfbztEKoH3kP

    MRJC2w4ByVdweWUT2PwrlATpZZtYLmtDvUKG/sOkNAIKEMg3Rut1oKWpjyYanzDgS7Cg3awr1KPTl9rHCazk

    15aNYowmYtVabKwbGVToCAGK+qQ1gT3ELhkGnf3+h53fukNqRH+wIDAQAB";

    // 日志记录目录

    public static String log_path = "/log";

    // RSA2

    public static String SIGNTYPE = "RSA2";

}


notify_url.jsp

<%@page import="com.alipay.api.internal.util.AlipaySignature"%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import="java.util.*"%>

<%@ page import="java.util.Map"%>

<%@ page import="com.alipay.config.*"%>

<%@ page import="com.alipay.api.*"%>

<%

    //获取支付宝POST过来反馈信息

    Map<String,String> params = new HashMap<String,String>();

    Map requestParams = request.getParameterMap();

    for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {

        String name = (String) iter.next();

        String[] values = (String[]) requestParams.get(name);

        String valueStr = "";

        for (int i = 0; i < values.length; i++) {

            valueStr = (i == values.length - 1) ? valueStr + values[i]

                    : valueStr + values[i] + ",";

        }

        //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化

        //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");

        params.put(name, valueStr);

    }

    //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//

        //商户订单号


        String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");

        //支付宝交易号


        String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");


        //交易状态

        String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");


        //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//

        //计算得出通知验证结果

        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)

        boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, "RSA2");

        

        if(verify_result){//验证成功

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

            //请在这里加上商户的业务逻辑程序代码


            //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

            

            if(trade_status.equals("TRADE_FINISHED")){

                //判断该笔订单是否在商户网站中已经做过处理

                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的

                    //如果有做过处理,不执行商户的业务程序

                    

                //注意:

                //如果签约的是可退款协议,退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

                //如果没有签约可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。

            } else if (trade_status.equals("TRADE_SUCCESS")){

                //判断该笔订单是否在商户网站中已经做过处理

                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的

                    //如果有做过处理,不执行商户的业务程序

                    

                //注意:

                //如果签约的是可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。

            }


            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

            out.clear();

            out.println("success"); //请不要修改或删除


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

        }else{//验证失败

            out.println("fail");

        }

%>



return_url.jsp

<%@page import="com.alipay.api.internal.util.AlipaySignature"%>

<%

/* *

 功能:支付宝页面跳转同步通知页面

 版本:3.2

 日期:2011-03-17

 说明:

 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。


 //***********页面功能说明***********

 该页面可在本机电脑测试

 可放入HTML等美化页面的代码、商户业务逻辑程序代码

 TRADE_FINISHED(表示交易已经成功结束,并不能再对该交易做后续操作);

 TRADE_SUCCESS(表示交易已经成功结束,可以对该交易做后续操作,如:分润、退款等);

 //********************************

 * */

%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import="java.util.*"%>

<%@ page import="java.util.Map"%>

<%@ page import="com.alipay.config.*"%>

<%@ page import="com.alipay.api.*"%>

<html>

  <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>支付宝页面跳转同步通知页面</title>

  </head>

  <body>

<%

    //获取支付宝GET过来反馈信息

    Map<String,String> params = new HashMap<String,String>();

    Map requestParams = request.getParameterMap();

    for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {

        String name = (String) iter.next();

        String[] values = (String[]) requestParams.get(name);

        String valueStr = "";

        for (int i = 0; i < values.length; i++) {

            valueStr = (i == values.length - 1) ? valueStr + values[i]

                    : valueStr + values[i] + ",";

        }

        //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化

        valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");

        params.put(name, valueStr);

    }

    

    //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//

    //商户订单号


    String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");


    //支付宝交易号


    String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");


    //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//

    //计算得出通知验证结果

    //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)

    boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, "RSA2");

    

    if(verify_result){//验证成功

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

        //请在这里加上商户的业务逻辑程序代码

        //该页面可做页面美工编辑

        out.clear();

        out.println("验证成功<br />");

        //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——


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

    }else{

        //该页面可做页面美工编辑

        out.clear();

        out.println("验证失败");

    }

%>

  </body>

</html>


pay.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@page import="com.alipay.config.AlipayConfig" %>

<%@page import="com.alipay.api.AlipayClient"%>

<%@page import="com.alipay.api.DefaultAlipayClient"%>

<%@page import="com.alipay.api.AlipayApiException"%>

<%@page import="com.alipay.api.response.AlipayTradeWapPayResponse"%>

<%@page import="com.alipay.api.request.AlipayTradeWapPayRequest"%>

<%@page import="com.alipay.api.domain.AlipayTradeWapPayModel" %>

<%@page import="com.alipay.api.domain.AlipayTradeCreateModel"%>

<%

/* *

 * 功能:支付宝手机网站支付接口(alipay.trade.wap.pay)接口调试入口页面

 * 版本:2.0

 * 修改日期:2016-11-01

 * 说明:

 * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

 请确保项目文件有可写权限,不然打印不了日志。

 */

%>

<%

if(request.getParameter("WIDout_trade_no")!=null){

    // 商户订单号,商户网站订单系统中唯一订单号,必填

    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");

    System.out.println(subject);

    // 付款金额,必填

    String total_amount=new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");

    // 商品描述,可空

    String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");

    // 超时时间 可空

   String timeout_express="2m";

    // 销售产品码 必填

    String product_code="QUICK_WAP_PAY";

    /**********************/

    // SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签     

    //调用RSA签名方式

    AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY,

     AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY,AlipayConfig.SIGNTYPE);

    AlipayTradeWapPayRequest alipay_request=new AlipayTradeWapPayRequest();

    

    // 封装请求支付信息

    AlipayTradeWapPayModel model=new AlipayTradeWapPayModel();

    model.setOutTradeNo(out_trade_no);

    model.setSubject(subject);

    model.setTotalAmount(total_amount);

    model.setBody(body);

    model.setTimeoutExpress(timeout_express);

    model.setProductCode(product_code);

    alipay_request.setBizModel(model);

    // 设置异步通知地址

    alipay_request.setNotifyUrl(AlipayConfig.notify_url);

    // 设置同步地址

    alipay_request.setReturnUrl(AlipayConfig.return_url);   

    

    // form表单生产

    String form = "";

    try {

        // 调用SDK生成表单

        form = client.pageExecute(alipay_request).getBody();

        response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); 

        response.getWriter().write(form);//直接将完整的表单html输出到页面 

        response.getWriter().flush(); 

        response.getWriter().close();

    } catch (AlipayApiException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    } 

}

%>


<!DOCTYPE html>

<html>

    <head>

    <title>支付宝手机网站支付接口</title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<style>

    *{

        margin:0;

        padding:0;

    }

    ul,ol{

        list-style:none;

    }

    body{

        font-family: "Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif;

    }

    .hidden{

        display:none;

    }

    .new-btn-login-sp{

        padding: 1px;

        display: inline-block;

        width: 75%;

    }

    .new-btn-login {

        background-color: #02aaf1;

        color: #FFFFFF;

        font-weight: bold;

        border: none;

        width: 100%;

        height: 30px;

        border-radius: 5px;

        font-size: 16px;

    }

    #main{

        width:100%;

        margin:0 auto;

        font-size:14px;

    }

    .red-star{

        color:#f00;

        width:10px;

        display:inline-block;

    }

    .null-star{

        color:#fff;

    }

    .content{

        margin-top:5px;

    }

    .content dt{

        width:100px;

        display:inline-block;

        float: left;

        margin-left: 20px;

        color: #666;

        font-size: 13px;

        margin-top: 8px;

    }

    .content dd{

        margin-left:120px;

        margin-bottom:5px;

    }

    .content dd input {

        width: 85%;

        height: 28px;

        border: 0;

        -webkit-border-radius: 0;

        -webkit-appearance: none;

    }

    #foot{

        margin-top:10px;

        position: absolute;

        bottom: 15px;

        width: 100%;

    }

    .foot-ul{

        width: 100%;

    }

    .foot-ul li {

        width: 100%;

        text-align:center;

        color: #666;

    }

    .note-help {

        color: #999999;

        font-size: 12px;

        line-height: 130%;

        margin-top: 5px;

        width: 100%;

        display: block;

    }

    #btn-dd{

        margin: 20px;

        text-align: center;

    }

    .foot-ul{

        width: 100%;

    }

    .one_line{

        display: block;

        height: 1px;

        border: 0;

        border-top: 1px solid #eeeeee;

        width: 100%;

        margin-left: 20px;

    }

    .am-header {

        display: -webkit-box;

        display: -ms-flexbox;

        display: box;

        width: 100%;

        position: relative;

        padding: 7px 0;

        -webkit-box-sizing: border-box;

        -ms-box-sizing: border-box;

        box-sizing: border-box;

        background: #1D222D;

        height: 50px;

        text-align: center;

        -webkit-box-pack: center;

        -ms-flex-pack: center;

        box-pack: center;

        -webkit-box-align: center;

        -ms-flex-align: center;

        box-align: center;

    }

    .am-header h1 {

        -webkit-box-flex: 1;

        -ms-flex: 1;

        box-flex: 1;

        line-height: 18px;

        text-align: center;

        font-size: 18px;

        font-weight: 300;

        color: #fff;

    }

</style>

</head>

<body text=#000000 bgColor="#ffffff" leftMargin=0 topMargin=4>

<header>

        <h1>支付宝手机网站支付接口快速通道(接口名:alipay.trade.wap.pay)</h1>

</header>

<div id="main">

        <form name=alipayment action='''' method=post target="_blank">

            <div id="body">

                <dl>

                    <dt>商户订单号:</dt>

                    <dd>

                        <input id="WIDout_trade_no" name="WIDout_trade_no" />

                    </dd>

                    <hr>

                    <dt>订单名称:</dt>

                    <dd>

                        <input id="WIDsubject" name="WIDsubject" />

                    </dd>

                    <hr>

                    <dt>付款金额:</dt>

                    <dd>

                        <input id="WIDtotal_amount" name="WIDtotal_amount" />

                    </dd>

                    <hr/>

                    <dt>商品描述:</dt>

                    <dd>

                        <input id="WIDbody" name="WIDbody" />

                    </dd>

                    <hr>

                    <dt></dt>

                    <dd id="btn-dd">

                        <span>

                            <buttontype="submit">确 认</button>

                        </span>

                        <span>如果您点击“确认”按钮,即表示您同意该次的执行操作。</span>

                    </dd>

                </dl>

            </div>

        </form>

        <div id="foot">

            <ul>

                <li>

                    支付宝版权所有 2015-2018 ALIPAY.COM 

                </li>

            </ul>

        </div>

    </div>

</body>

<script language="javascript">

    function GetDateNow() {

        var vNow = new Date();

        var sNow = "";

        sNow += String(vNow.getFullYear());

        sNow += String(vNow.getMonth() + 1);

        sNow += String(vNow.getDate());

        sNow += String(vNow.getHours());

        sNow += String(vNow.getMinutes());

        sNow += String(vNow.getSeconds());

        sNow += String(vNow.getMilliseconds());

        document.getElementById("WIDout_trade_no").value =  sNow;

        document.getElementById("WIDsubject").value = "手机网站支付测试商品";

        document.getElementById("WIDtotal_amount").value = "0.01";

        document.getElementById("WIDbody").value = "购买测试商品0.01元";

    }

    GetDateNow();

</script>

</html>



配置支付宝相应参数信息,具体如下:

// 商户appid

public static String APPID = "";

// 私钥 pkcs8格式的

public static String RSA_PRIVATE_KEY = "";

// 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问

public static String notify_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/notify_url.jsp";

// 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址

public static String return_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/return_url.jsp";

// 请求网关地址

public static String URL = "https://openapi.alipay.com/gateway.do";

// 编码

public static String CHARSET = "UTF-8";

// 返回格式

public static String FORMAT = "json";

// 支付宝公钥

public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjrEVFMOSiNJXaRNKicQuQdsREraftDA9Tua3WNZwcpeXeh8Wrt+V9JilLqSa7N7sVqwpvv8zWChgXhX/A96hEg97Oxe6GKUmzaZRNh0cZZ88vpkn5tlgL4mH/dhSr3Ip00kvM4rHq9PwuT4k7z1DpZAf1eghK8Q5BgxL88d0X07m9X96Ijd0yMkXArzD7jg+noqfbztEKoH3kPMRJC2w4ByVdweWUT2PwrlATpZZtYLmtDvUKG/sOkNAIKEMg3Rut1oKWpjyYanzDgS7Cg3awr1KPTl9rHCazk15aNYowmYtVabKwbGVToCAGK+qQ1gT3ELhkGnf3+h53fukNqRH+wIDAQAB";

// 日志记录目录

public static String log_path = "/log";

// RSA2

public static String SIGNTYPE = "RSA2";

将商户appid、私钥、notify_url、return_url、支付宝公钥等配置信息填写正确。

配置完毕后启动项目,访问http://localhost:8081/alipay地址,选择手机网站2.0支付(接口名:alipay.trade.wap.pay)链接,具体如图:

这就完成了集成支付宝,代码方面没有必要用支付宝代码,比如配置参数,支付宝jsp代码搬到后台等等可以自己优化代码,将其加入公司业务类中进行调试,代码就这些配置完成就ok了。


推荐↓↓↓
 

优哉游哉

更多推荐《优哉游哉

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

本文分享自微信公众号 - Java精选(w_z90110)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Payment:支付宝即时到账接口接入教程

Payment:支付宝即时到账接口接入教程

记住,如果觉得文档写得不清楚,一定要告诉我。励志写好文档为大家服务!

Payment 3.0 支付宝的配置设置文档请 点击这里


项目GitHub地址:https://github.com/helei112g/...

支付宝从新版本开始,提供了沙箱方式,方便进行调试。但是,即时到账支付宝没有提供沙箱模式。因此大家在使用过程中,注意设置配置。

我在项目中提供的初始配置也不能用于测试 即时到账接口

即时到账属于老版本接口。不支持 RSA2 的签名方式,请设置为 RSA 签名方式。

即时到账 主要应用于网站支付。当前也可使用支付宝提供的当面付--扫码支付来完成网站支付的业务。

即时到账接口属于支付宝老版本接口,当前 Payment 依然将其进行了保留。后期会跟随支付宝公告进行调整。
即时到账的权限需要在支付宝商家平台进行签约。

签约地址: https://b.alipay.com/order/pr...

即时到账签约后,默认开通以下两个接口的权限:

但是 Payment3.x 并未接入 即时到账批量退款有密接口。大家可以通过 新版退款接口发起退款操作。
退款操作文档,可点击这里(TODO)

先上 即时到账发起支付 需要的参数列表

参数 类型 是否必须 说明
body boolean 商品描述
subject string 商品名称,该参数最长为128个汉字
order_no string 商户网站唯一订单号
timeout_express string 设置未付款交易的超时时间,一旦超时,该笔交易就会自动被关闭。
amount float 该笔订单的资金总额,单位为RMB-Yuan
return_param string 公用回传参数
qr_mod string 扫码支付方式
paymethod string 默认支付方式

body 主要是对商品的描述,根据自己的业务写就好,不要用一些非常特殊的字符,支付宝可能会进行一些处理,导致你的结果与预期不一样

subject 可以写一下商品名称信息,主要是方便支付宝后台对账时查看

order_no 自己生成的订单号,每次下单的单号必须唯一。也就是说:同一个 order_no 他的其他下单数据不能发生变化,价格、名称等等。如果有变化,需要重新生成一个订单号。

timeout_express 订单过期时间,很简单,你希望在那一刻过期,就写那个点的时间戳。只会精确到分钟

amount 订单的金额,就是用户实际需要支付的金额。

return_param 希望支付宝异步通知时,原样返回给你的数据,同样注意避免一些特殊字符

qr_mod 这个参数可以不设置,如果没有特殊需求建议不设置,可设置:0 1 2 3 。效果可以自己看看

paymethod 当用户进行支付时,默认使用的付款方式。可选值:creditPay(信用支付)directPay(余额支付)


ok,以上就是需要发起支付的全部参数了。具体到 sdk 如何调用。看代码

use Payment\Common\PayException;
use Payment\Client\Charge;

$config = require_once(''./aliconfig.php'');// 这里我假设大家都已经配置好了。不会的请去看配置设置文档


$channel = ''ali_web'';
$payData = [
    ''body'' => ''一个苹果'',
    ''subject'' => ''牛逼公司--付款吧'',
    ''order_no'' => ''NB12312355'',
    ''timeout_express'' => ''1489241888'',
    ''amount'' => ''100'',
    ''return_param'' => ''buy some'',
    //''qr_mod'' => '''',  // 这个参数建议默认就好,不设置
    ''paymethod'' => ''creditPay'',
];

try {
    $payUrl = Charge::run($channel, $config, $payData);
} catch (PayException $e) {
    // 异常处理
    exit;
}

echo htmlspecialchars($payUrl);

返回值 $payUrl 是跳转向支付宝支付的一个连接。访问该连接即可跳转到支付宝。

即时到账的代码就全部完成了。

接下来说下重点,请仔细往下看。

这里需要注意的一个点: htmlspecialchars() 函数在正式环境上,如果时进行url的跳转操作,请不要用它进行转义。我这里使用它是为了方便输出到页面上。因为 &not 是一个特殊符号,如果不转移,在网页上无法正常显示。

Payment 的设计思路是将配置文件与下单数据进行了分离。配置文件一般来讲是静态的,不会经常变更,并且大家都会用到。而下单的订单数据则不同,每一个支付接口需要的下单数据不同,并且根据业务,其对应的值也不稳定,常常发生变化。

其次,还有一个 $channel 参数,这个简单来讲,就是用来标记,你现在想要使用那种接口。可以取的参数如下:

channel可取值

名称 含义
ali_web 即时到账
ali_app app支付(移动支付)
ali_wap H5支付(手机网站支付、wap支付)
ali_qr 当面付中的扫码支付
ali_bar 当面付中的条码支付

如果你有不清楚的或者愿意交流的地方,请联系我:

邮箱:dayugog@gmail.com

如果你觉得这个项目有帮助到你,请打赏我,让我有动力持续下去[左边微信,右边支付宝]():

image

ps: 一般性的问题请大家可以先查资料,如果实在无法解决找我吧(不免费服务)。

我们今天的关于thinkPHP框架对接支付宝即时到账接口回调操作示例支付宝即时到账支付接口的分享就到这里,谢谢您的阅读,如果想了解更多关于3.4版,支付宝即时到账积分不到账、java 接支付宝及时到账接口,有朋友接过吗?、Java如何集成第三方即时到账接口 - 支付宝、Payment:支付宝即时到账接口接入教程的相关信息,可以在本站进行搜索。

本文标签: