可以通过URL传参,直接把支付宝收款人怎么设置的收款人,和转账金额,和备注填写上吗?

15:05 提问
关于支付宝支付回调接口参数问题
支付宝回调接口参数中notify__url这个参数,支持ip加端口的格式吗?
按赞数排序
我也正苦恼这个问题,我用ip:端口,进行测试,总是报黄页,我又没有可以直接测试的环境。。。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐ThinkPHP实现支付宝接口功能 - ThinkPHP框架
最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能。这里我用的是即时到帐的接口,具体实现的步骤如下:一、下载支付宝接口包
下载地址:
具体如何下载,我就不在罗嗦了~~
很多人反映,用支付宝的接口到最后面会出现验证错误。其实,这里需要对接口程序进行一下改造。需要添加几个自定义函数。为了让大家以后避免出现同样的问题,我把我改造好的支付宝接口程序上传了()。大家可以下载下来,解压后放到框架的Vendor目录中即可~
二、重新整理接口包文件,这一步应该算是比较关键的(个人认为)
下载下来的接口包文件有很多语言的源码,
我们选择 create_direct_pay_by_user-PHP-UTF-8 这个名称的接口文件。里面包括如下文件:
images文件里是支付宝相关的一些标志的图片,我们暂不管他,lib文件很重要,是整个接口的核心类文件;
alipay.config.php是相关参数的配置文件
alipayapi.php
是支付宝接口入口文件
notify_url.php 是服务器异步通知页面文件;
return_url.php 是页面跳转同步通知文件;
在ThinkPHP的框架文件下,找到Extend 进入,再进入Vendor,在Vendor文件夹下,新建文件夹Alipay,把支付宝作为第三方类库引入。然后,复制支付宝接口文件包中lib文件里的所有文件。一共4个文件,如下:
现在对以上文件进行重命名,
alipay_core.function.php重命名为:Corefunction.
alipay_md5.function.php重命名为:Md5function.php;
alipay_notify.class.php重命名为:Notify.php;
alipay_submit.class.php重命名为:Submit.php;
然后,打开Submit.php文件,把以下代码去掉;require_once(&alipay_core.function.php&);
require_once(&alipay_md5.function.php&);同样,打开Notify.php文件,把以下两段代码去掉require_once(&alipay_core.function.php&);
require_once(&alipay_md5.function.php&);为什么要去掉以上两个文件中的这两段代码,因为在项目中调用接口文件的时候,我把所有4个核心文件都通过vendor来进行引入。所以,这不再需要导入。
到此,支付宝接口包相关核心类库的整理基本完成。现在开始在项目中调用;
三、在项目中调用支付宝接口
调用分两步:
1、在配置文件中Conf/Config.php文件中对支付宝相关参数进行配置://支付宝配置参数
'alipay_config'=&array(
&&&&&&&'partner'&=&'20********50',&&&//这里是你在成功申请支付宝接口后获取到的PID;
&&&&'key'=&'9t***********ie',//这里是你在成功申请支付宝接口后获取到的Key
&&&&'sign_type'=&strtoupper('MD5'),
&&&&'input_charset'=&&strtolower('utf-8'),
&&&&'cacert'=&&getcwd().'\\cacert.pem',
&&&&'transport'=&&'http',
&&&&&//以上配置项,是从接口包中alipay.config.php&文件中复制过来,进行配置;
'alipay'&&&=&array(
&//这里是卖家的支付宝账号,也就是你申请接口时注册的支付宝账号
'seller_email'=&'',
//这里是异步通知页面url,提交到项目的Pay控制器的notifyurl方法;
'notify_url'=&'http://www.xxx.com/Pay/notifyurl',&
//这里是页面跳转通知url,提交到项目的Pay控制器的returnurl方法;
'return_url'=&'http://www.xxx.com/Pay/returnurl',
//支付成功跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参payed(已支付列表)
'successpage'=&'User/myorder?ordtype=payed',&&&
//支付失败跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参unpay(未支付列表)
'errorpage'=&'User/myorder?ordtype=unpay',&
),2、新建一个PayAction控制器代码如下:&?php
class&PayAction&extends&Action{
&&&&&&&//在类初始化方法中,引入相关类库&&&&
&&&&&&&public&function&_initialize()&{
&&&&&&&&vendor('Alipay.Corefunction');
&&&&&&&&vendor('Alipay.Md5function');
&&&&&&&&vendor('Alipay.Notify');
&&&&&&&&vendor('Alipay.Submit');&&&&
&&&&//doalipay方法
&&&&&&&&/*该方法其实就是将接口文件包下alipayapi.php的内容复制过来
&&&&&&&&&&然后进行相关处理
&&&&&&&&*/
&&&&public&function&doalipay(){
&&&&&&&&&&&&/*********************************************************
&&&&&&&&&&&&把alipayapi.php中复制过来的如下两段代码去掉,
&&&&&&&&&&&&第一段是引入配置项,
&&&&&&&&&&&&第二段是引入submit.class.php这个类。
&&&&&&&&&&&为什么要去掉??
&&&&&&&&&&&&第一,配置项的内容已经在项目的Config.php文件中进行了配置,我们只需用C函数进行调用即可;
&&&&&&&&&&&&第二,这里调用的submit.class.php类库我们已经在PayAction的_initialize()中已经引入;所以这里不再需要;
&&&&&&&&&&&&*****************************************************/
&&&&&&&//&require_once(&alipay.config.php&);
&&&&&&&//&require_once(&lib/alipay_submit.class.php&);
&&&&&&&//这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config;
&&&&&&&$alipay_config=C('alipay_config');&&
&&&&&&&&/**************************请求参数**************************/
&&&&&&&&$payment_type&=&&1&;&//支付类型&//必填,不能修改
&&&&&&&&$notify_url&=&C('alipay.notify_url');&//服务器异步通知页面路径
&&&&&&&&$return_url&=&C('alipay.return_url');&//页面跳转同步通知页面路径
&&&&&&&&$seller_email&=&C('alipay.seller_email');//卖家支付宝帐户必填
&&&&&&&&$out_trade_no&=&$_POST['trade_no'];//商户订单号&通过支付页面的表单进行传递,注意要唯一!
&&&&&&&&$subject&=&$_POST['ordsubject'];&&//订单名称&//必填&通过支付页面的表单进行传递
&&&&&&&&$total_fee&=&$_POST['ordtotal_fee'];&&&//付款金额&&//必填&通过支付页面的表单进行传递
&&&&&&&&$body&=&$_POST['ordbody'];&&//订单描述&通过支付页面的表单进行传递
&&&&&&&&$show_url&=&$_POST['ordshow_url'];&&//商品展示地址&通过支付页面的表单进行传递
&&&&&&&&$anti_phishing_key&=&&&;//防钓鱼时间戳&//若要使用请调用类文件submit中的query_timestamp函数
&&&&&&&&$exter_invoke_ip&=&get_client_ip();&//客户端的IP地址&
&&&&&&&&/************************************************************/
&&&&&&&&//构造要请求的参数数组,无需改动
&&&&$parameter&=&array(
&&&&&&&&&service&&=&&&create_direct_pay_by_user&,
&&&&&&&&&partner&&=&&trim($alipay_config['partner']),
&&&&&&&&&payment_type&&&&&=&&$payment_type,
&&&&&&&&&notify_url&&&&&=&&$notify_url,
&&&&&&&&&return_url&&&&&=&&$return_url,
&&&&&&&&&seller_email&&&&&=&&$seller_email,
&&&&&&&&&out_trade_no&&&&&=&&$out_trade_no,
&&&&&&&&&subject&&&&&=&&$subject,
&&&&&&&&&total_fee&&&&&=&&$total_fee,
&&&&&&&&&body&&&&&&&&&&&&&=&&$body,
&&&&&&&&&show_url&&&&&=&&$show_url,
&&&&&&&&&anti_phishing_key&&&&&=&&$anti_phishing_key,
&&&&&&&&&exter_invoke_ip&&&&&=&&$exter_invoke_ip,
&&&&&&&&&_input_charset&&&&&=&&trim(strtolower($alipay_config['input_charset']))
&&&&&&&&);
&&&&&&&&//建立请求
&&&&&&&&$alipaySubmit&=&new&AlipaySubmit($alipay_config);
&&&&&&&&$html_text&=&$alipaySubmit-&buildRequestForm($parameter,&post&,&&确认&);
&&&&&&&&echo&$html_
&&&&&&&&/******************************
&&&&&&&&服务器异步通知页面方法
&&&&&&&&其实这里就是将notify_url.php文件中的代码复制过来进行处理
&&&&&&&&*******************************/
&&&&function&notifyurl(){
&&&&&&&&&&&&&&&&/*
&&&&&&&&&&&&&&&&同理去掉以下两句代码;
&&&&&&&&&&&&&&&&*/&
&&&&&&&&&&&&&&&&//require_once(&alipay.config.php&);
&&&&&&&&&&&&&&&&//require_once(&lib/alipay_notify.class.php&);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&//这里还是通过C函数来读取配置项,赋值给$alipay_config
&&&&&&&&$alipay_config=C('alipay_config');
&&&&&&&&//计算得出通知验证结果
&&&&&&&&$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'];&&&&&&&&&//交易金额
&&&&&&&&&&&$notify_id&&&&&&=&$_POST['notify_id'];&&&&&&&&&//通知校验ID。
&&&&&&&&&&&$notify_time&&&&=&$_POST['notify_time'];&&&&&&&//通知的发送时间。格式为yyyy-MM-dd&HH:mm:ss。
&&&&&&&&&&&$buyer_email&&&&=&$_POST['buyer_email'];&&&&&&&//买家支付宝帐号;
&&&&&&&&&&&&&&&&&&&$parameter&=&array(
&&&&&&&&&&&&&&out_trade_no&&&&&&=&&$out_trade_no,&//商户订单编号;
&&&&&&&&&&&&&&trade_no&&&&&&=&&$trade_no,&&&&&//支付宝交易号;
&&&&&&&&&&&&&&total_fee&&&&&&=&&$total_fee,&&&&//交易金额;
&&&&&&&&&&&&&&trade_status&&&&&&=&&$trade_status,&//交易状态
&&&&&&&&&&&&&&notify_id&&&&&&=&&$notify_id,&&&&//通知校验ID。
&&&&&&&&&&&&&&notify_time&&&&=&&$notify_time,&&//通知的发送时间。
&&&&&&&&&&&&&&buyer_email&&&&=&&$buyer_email,&&//买家支付宝帐号;
&&&&&&&&&&&);
&&&&&&&&&&&if($_POST['trade_status']&==&'TRADE_FINISHED')&{
&&&&&&&&&&&&&&&&&&&&&&&//
&&&&&&&&&&&}else&if&($_POST['trade_status']&==&'TRADE_SUCCESS')&{&&&&&&&&&&&&&&&&&&&&&&&&&&&if(!checkorderstatus($out_trade_no)){
&&&&&&&&&&&&&&&orderhandle($parameter);&
&&&&&&&&&&&&&&&&&&&&&&&&&&&//进行订单处理,并传送从支付宝返回的参数;
&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&echo&&success&;&&&&&&&&//请不要修改或删除
&&&&&&&&&}else&{
&&&&&&&&&&&&&&&&//验证失败
&&&&&&&&&&&&&&&&echo&&fail&;
&&&&&&&&}&&&&
&&&&&&&&页面跳转处理方法;
&&&&&&&&这里其实就是将return_url.php这个文件中的代码复制过来,进行处理;&
&&&&&&&&*/
&&&&function&returnurl(){
&&&&&&&&&&&&&&&&//头部的处理跟上面两个方法一样,这里不罗嗦了!
&&&&&&&&$alipay_config=C('alipay_config');
&&&&&&&&$alipayNotify&=&new&AlipayNotify($alipay_config);//计算得出通知验证结果
&&&&&&&&$verify_result&=&$alipayNotify-&verifyReturn();
&&&&&&&&if($verify_result)&{
&&&&&&&&&&&&//验证成功
&&&&&&&&&&&&//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
&&&&&&&&$out_trade_no&&&=&$_GET['out_trade_no'];&&&&&&//商户订单号
&&&&&&&&$trade_no&&&&&&&=&$_GET['trade_no'];&&&&&&&&&&//支付宝交易号
&&&&&&&&$trade_status&&&=&$_GET['trade_status'];&&&&&&//交易状态
&&&&&&&&$total_fee&&&&&&=&$_GET['total_fee'];&&&&&&&&&//交易金额
&&&&&&&&$notify_id&&&&&&=&$_GET['notify_id'];&&&&&&&&&//通知校验ID。
&&&&&&&&$notify_time&&&&=&$_GET['notify_time'];&&&&&&&//通知的发送时间。
&&&&&&&&$buyer_email&&&&=&$_GET['buyer_email'];&&&&&&&//买家支付宝帐号;
&&&&&&&&&&&&
&&&&&&&&$parameter&=&array(
&&&&&&&&&&&&&out_trade_no&&&&&&=&&$out_trade_no,&&&&&&//商户订单编号;
&&&&&&&&&&&&&trade_no&&&&&&=&&$trade_no,&&&&&&&&&&//支付宝交易号;
&&&&&&&&&&&&&total_fee&&&&&&&=&&$total_fee,&&&&&&&&&//交易金额;
&&&&&&&&&&&&&trade_status&&&&&&=&&$trade_status,&&&&&&//交易状态
&&&&&&&&&&&&&notify_id&&&&&&&=&&$notify_id,&&&&&&&&&//通知校验ID。
&&&&&&&&&&&&&notify_time&&&&&=&&$notify_time,&&&&&&&//通知的发送时间。
&&&&&&&&&&&&&buyer_email&&&&&=&&$buyer_email,&&&&&&&//买家支付宝帐号
&&&&&&&&);
if($_GET['trade_status']&==&'TRADE_FINISHED'&||&$_GET['trade_status']&==&'TRADE_SUCCESS')&{
&&&&&&&&if(!checkorderstatus($out_trade_no)){
&&&&&&&&&&&&&orderhandle($parameter);&&//进行订单处理,并传送从支付宝返回的参数;
&&&&&&&&$this-&redirect(C('alipay.successpage'));//跳转到配置项中配置的支付成功页面;
&&&&}else&{
&&&&&&&&echo&&trade_status=&.$_GET['trade_status'];
&&&&&&&&$this-&redirect(C('alipay.errorpage'));//跳转到配置项中配置的支付失败页面;
&&&&//验证失败
&&&&//如要调试,请看alipay_notify.php页面的verifyReturn函数
&&&&echo&&支付失败!&;
?&3、这里有几个支付处理过程中需要用到的函数,我把这些函数写到了项目的Common/common.php中,这样不用手动调用,即可直接使用这些函数,代码如下://////////////////////////////////////////////////////
//Orderlist数据表,用于保存用户的购买订单记录;
/*&Orderlist数据表结构;
CREATE&TABLE&`tb_orderlist`&(
&&`id`&int(11)&NOT&NULL&AUTO_INCREMENT,
&&`userid`&int(11)&DEFAULT&NULL,购买者userid
&&`username`&varchar(255)&DEFAULT&NULL,购买者姓名
&&`ordid`&varchar(255)&DEFAULT&NULL,订单号
&&`ordtime`&int(11)&DEFAULT&NULL,订单时间
&&`productid`&int(11)&DEFAULT&NULL,产品ID
&&`ordtitle`&varchar(255)&DEFAULT&NULL,订单标题
&&`ordbuynum`&int(11)&DEFAULT&'0',购买数量
&&`ordprice`&float(10,2)&DEFAULT&'0.00',产品单价
&&`ordfee`&float(10,2)&DEFAULT&'0.00',订单总金额
&&`ordstatus`&int(11)&DEFAULT&'0',订单状态
&&`payment_type`&varchar(255)&DEFAULT&NULL,支付类型
&&`payment_trade_no`&varchar(255)&DEFAULT&NULL,支付接口交易号
&&`payment_trade_status`&varchar(255)&DEFAULT&NULL,支付接口返回的交易状态
&&`payment_notify_id`&varchar(255)&DEFAULT&NULL,
&&`payment_notify_time`&varchar(255)&DEFAULT&NULL,
&&`payment_buyer_email`&varchar(255)&DEFAULT&NULL,
&&`ordcode`&varchar(255)&DEFAULT&NULL,&&&&&&&//这个字段不需要的,大家看我西面的修正补充部分的说明!
&&`isused`&int(11)&DEFAULT&'0',
&&`usetime`&int(11)&DEFAULT&NULL,
&&`checkuser`&int(11)&DEFAULT&NULL,
&&PRIMARY&KEY&(`id`)
)&ENGINE=MyISAM&AUTO_INCREMENT=5&DEFAULT&CHARSET=utf8;
//在线交易订单支付处理函数
//函数功能:根据支付接口传回的数据判断该订单是否已经支付成功;
//返回值:如果订单已经成功支付,返回true,否则返回false;
function&checkorderstatus($ordid){
&&&&$Ord=M('Orderlist');
&&&&$ordstatus=$Ord-&where('ordid='.$ordid)-&getField('ordstatus');
&&&&if($ordstatus==1){
&&&&&&&&return&
&&&&}else{
&&&&&&&&return&&&&&
//处理订单函数
//更新订单状态,写入订单支付后返回的数据
function&orderhandle($parameter){
&&&&$ordid=$parameter['out_trade_no'];
&&&&$data['payment_trade_no']&&&&&&=$parameter['trade_no'];
&&&&$data['payment_trade_status']&&=$parameter['trade_status'];
&&&&$data['payment_notify_id']&&&&&=$parameter['notify_id'];
&&&&$data['payment_notify_time']&&&=$parameter['notify_time'];
&&&&$data['payment_buyer_email']&&&=$parameter['buyer_email'];
&&&&$data['ordstatus']&&&&&&&&&&&&&=1;
&&&&$Ord=M('Orderlist');
&&&&$Ord-&where('ordid='.$ordid)-&save($data);
/*-----------------------------------
下面这个函数,其实不需要,大家可以把他删掉,
具体看我下面的修正补充部分的说明
------------------------------------*/
//获取一个随机且唯一的订单号;
function&getordcode(){
&&&&$Ord=M('Orderlist');
&&&&$numbers&=&range&(10,99);
&&&&shuffle&($numbers);&
&&&&$code=array_slice($numbers,0,4);&
&&&&$ordcode=$code[0].$code[1].$code[2].$code[3];
&&&&$oldcode=$Ord-&where(&ordcode='&.$ordcode.&'&)-&getField('ordcode');
&&&&if($oldcode){
&&&&&&&&getordcode();
&&&&}else{
&&&&&&&&return&$
}四、总结几点
1、接口包中lib文件中的文件复制到Vendor后,重命名为TP规范的命名规则,为的是调用方便,当然你要改成其他名称也可以;
2、把执行支付操作(doalipay),处理异步返回结果(notifyurl),处理跳转返回结果(returnurl)三个支付接口的核心页面写到一个PayAction控制器中。
3、提交支付的页面中,可以在提交之前先把一些参数要传递的内容先通过隐藏域的方法组合好,比如金额先计算好,订单名称,订单描述等先用字符串组合好。然后提交表单,这样,在doalipay方法中只要直接构造传递参数,直接进行提交就行过了。
4、支付返回后的处理因为要在异步和跳转两个方法中都要进行相应的判断和处理,所以,把这些判断和处理写到一个自定义函数中,这样只要调用函数即可,使得代码更加清晰明了。
5、notify_url和return_url两种模式的返回url必须使用http://xxxxxxx这样的绝对路径,因为里是从支付宝平台返回到你的项目页面。不能使用相对路径。
以上代码在ThinkPHP3.0中正常使用!!
------------------------修正补充!!------------------------------
在第三部分中Orderlist数据表结构中,我有一个字段是OrdCode,这个字段是我系统中用来发送短信给客户的消费密码,也就是客户凭手机短信来消费时就要验证这个字段。
其实,大家在做系统的时候,可以把这个字段忽略,可以不用他。代码最后部分中,有一个获取一个随机且唯一的订单号的函数 getordcode(),这里我其实写错了,不是获取订单号,是ordcode,也就是消费密码,这个函数也不需要。系统中的订单号(ordid字段),我用的是时间戳。
在此修正!
--------------------解决签名错误问题 修正 13-08-16------------------------
有人说在在调试时,签名出现无法通过的问题,产生问题的原因是在返回的URL地址中返回的参数中,可能存在__URL__这样的字符串。导致无法正确过滤参数。
在向支付宝提交需要的参数时,不要使用__URL__,__PUBLIC__等TP中的模版替换变量,如果TP对这些变量解析不成功,会直接传递过去,所以,在这些地方直接使用原始的URL地址。
在接口的Core文件中,加入改造后的过滤函数,如下:/**
&*&除去数组中的空值和签名参数
&*&@param&$para&签名参数组
&*&return&去掉空值与签名参数后的新签名参数组
function&paraFilter($para)&{
&&&&$para_filter&=&array();
&&&&while&(list&($key,&$val)&=&each&($para))&{
&&&&&&&&if($key&==&&sign&&||&$key&==&&sign_type&&||&$key&==&'_URL_'&||&$val&==&&&)&&&&//添加了$key&==&'_URL_'&
&&&&&&&&else&&&&$para_filter[$key]&=&$para[$key];
&&&&return&$para_
function&myparaFilter($para)&{
&&&&$para_filter&=&array();
&&&&while&(list&($key,&$val)&=&each&($para))&{
&&&&&&&&if($key&==&'_URL_')
&&&&&&&&else&$para_filter[$key]&=&$para[$key];
&&&&return&$para_
=============================================
作为一个程序猿,分享一直是我秉承的理念,坚持开源和免费,与大家在WEB开发方面共同进步!
积分:6856
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。支付宝支付--即时到账 开发总结
时间: 18:16:09
&&&& 阅读:164
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&在支付宝支付的开发过程中,通过自己的理解和尝试做出一点流程总结记录:
支付宝开放平台 点击业务接入-》即时到账 ,即可下载 即时到账DEMO。DEMO中包含 两种签名版本(MD5、RSA) 三种编程语言(CSHARP、JAVA、PHP) 两种编码格式(GBK、UTF-8),我选择是MD5签名下的PHP语言UTF-8编码。
  如果项目拥有SSL加密协议,也就是HTTPS安全通道,可以使用rsa签名的方式进行开发。
二.先配置 alipay.config.php 文件:
1 //&&&&&&&&&&请在这里配置您的基本信息&&&&&&&&&&&&&&&
2 //合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
3 $alipay_config[‘partner‘]
4 //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号
5 $alipay_config[‘seller_id‘]
= $alipay_config[‘partner‘];
6 //或者$alipay_config[‘seller_email‘]或者$alipay_config[‘seller_account_name‘]
7 // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
8 $alipay_config[‘key‘]
9 // 服务器异步通知页面路径
需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
10 $alipay_config[‘notify_url‘] = "http://商户网址/create_direct_pay_by_user-PHP-UTF-8/notify_url.php";
11 // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
12 $alipay_config[‘return_url‘] = "http://商户网址/create_direct_pay_by_user-PHP-UTF-8/return_url.php";
13 //签名方式
14 $alipay_config[‘sign_type‘]
= strtoupper(‘MD5‘);
15 //字符编码格式 目前支持 gbk 或 utf-8
16 $alipay_config[‘input_charset‘]= strtolower(‘utf-8‘);
17 //ca证书路径地址,用于curl中ssl校验
18 //请保证cacert.pem文件在当前文件夹目录中
19 $alipay_config[‘cacert‘]
= getcwd().‘\\cacert.pem‘;
20 //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
21 $alipay_config[‘transport‘]
= ‘http‘;
22 // 支付类型 ,无需修改
23 $alipay_config[‘payment_type‘] = "1";
24 // 产品类型,无需修改
25 $alipay_config[‘service‘] = "create_direct_pay_by_user";
26 //&&&&&&&&&&请在这里配置您的基本信息&&&&&&&&&&&&&&&
27 //&&&&&&&&&& 请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 &&&&&&&&&&&&&&&
28 // 防钓鱼时间戳
若要使用请调用类文件submit中的query_timestamp函数
29 $alipay_config[‘anti_phishing_key‘] = "";
31 // 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1
32 $alipay_config[‘exter_invoke_ip‘] = "";
33 //&&&&&&&&&&请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 &&&&&&&&&&&&&&&
官方demo注解已经写得很详细了,值得至于的问题& $alipay_config[‘partner‘]& $alipay_config[‘key‘] &$alipay_config[‘seller_id/seller_email/seller_account_name‘](该参数三选一 卖家的支付宝用户号/账号/账号别名) 这三个参数是由支付宝开发平台提供的。
而 $alipay_config[‘notify_url‘] $alipay_config[‘return_url‘] 参数 由开发者设置,设置时必须保证外网可以访问到的地址且不可以带?id=123自定义参数
  ‘notify_url‘&异步通知地址 : 这个地址是用户支付完成后,支付宝异步回调的地址,开发者必须在该地址下的PHP文件进行支付成功后业务逻辑处理。
  ‘return_url‘ 同步通知地址: 这个地址是用户支付完成后,支付宝同步跳转的地址,开发者在该地址下的PHP文件处理支付宝支付成功的页面显示。
三.配置完成后 在需要需要支付的php文件中载入 require_once "/lib/alipay_submit.class.php";& 和 在支付的类里 载入 require_once PAYPATH."/alipay.config.php";
四.实例化 AlipaySubmit 类 传入参数数组& 参数列表:
接口名称。
create_direct_pay_by_user
合作者身份ID
String(16)
签约的支付宝账号对应的支付宝唯一用户号。
以2088开头的16位纯数字组成。
_input_charset
参数编码字符集
商户网站使用的编码格式,如utf-8、gbk、gb2312等。
DSA、RSA、MD5三个值可选,必须大写。
7d314d22efba4f336fbd2
notify_url
服务器异步通知页面路径
String(190)
支付宝服务器主动通知商户网站里指定的页面http路径。
http://api.test.alipay.net/atinterface/receive_return.htm
return_url
页面跳转同步通知页面路径
String(200)
支付宝处理完请求后,当前页面自动跳转到商户网站里指定页面的http路径。
http://api.test.alipay.net/atinterface/receive_return.htm
out_trade_no
商户网站唯一订单号
String(64)
支付宝合作商户网站唯一订单号。
String(256)
商品的标题/交易标题/订单标题/订单关键字等。
该参数最长为128个汉字。
贝尔金护腕式
payment_type
只支持取值为1(商品购买)。
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,],精确到小数点后两位。
卖家支付宝用户号
String(16)
seller_id是以2088开头的纯16位数字。
seller_email是支付宝登录账号,格式一般是邮箱或手机号。
seller_account_name是卖家支付宝账号别名。
三个参数至少必须传递一个。
当签约账号就是收款账号时,请务必使用参数seller_id,即seller_id的值与partner的值相同。
三个参数的优先级别是:seller_id&seller_account_name&seller_email。
seller_email
卖家支付宝账号
String(100)
seller_account_name
卖家支付宝账号别名
String(100)
买家支付宝用户号
String(16)
buyer_id是以2088开头的纯16位数字。
buyer_email是支付宝登录账号,格式一般是邮箱或手机号。
buyer_account_name是买家支付宝账号别名。
三个参数的优先级别是:buyer_id&buyer_account_name&buyer_email。
buyer_email
买家支付宝账号
String(100)
buyer_account_name
买家支付宝账号别名
String(100)
单位为:RMB Yuan。取值范围为[0.01,],精确到小数点后两位。此参数为单价
规则:price、quantity能代替total_fee。即存在total_fee,就不能存在price和quantity;存在price、quantity,就不能存在total_fee。
price、quantity能代替total_fee。即存在total_fee,就不能存在price和quantity;存在price、quantity,就不能存在total_fee。
String(1000)
对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
美国专业护腕鼠标垫,舒缓式凝胶软垫模拟手腕的自然曲线和运动,创造和缓的GelFlex舒适地带!
商品展示网址
String(400)
收银台页面上,商品展示的超链接。
http://www.360buy.com/product/113714.html
默认支付方式
取值范围:
creditPay(信用支付)
directPay(余额支付)
如果不设置,默认识别为余额支付。
必须注意区分大小写。
enable_paymethod
用于控制收银台支付渠道显示,该值的取值范围请参见。
可支持多种支付渠道显示,以&^&分隔。
directPay^bankPay^cartoon^cash
anti_phishing_key
防钓鱼时间戳
通过时间戳查询接口获取的加密支付宝系统时间戳。
如果已申请开通防钓鱼时间戳验证,则此字段必填。
587FE3DE5E2
exter_invoke_ip
String(15)
用户在创建交易时,该用户当前所使用机器的IP。
如果商户申请后台开通防钓鱼IP地址检查选项,此字段必填,校验用。
128.214.222.111
extra_common_param
公用回传参数
String(100)
如果用户请求时传递了该参数,则返回给商户时会回传该参数。
你好,这是测试商户的广告。
设置未付款交易的超时时间,一旦超时,该笔交易就会自动被关闭。
取值范围:1m~15d。
m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。
该参数数值不接受小数点,如1.5h,可转换为90m。
快捷登录授权令牌
String(40)
如果开通了快捷登录产品,则需要填写;如果没有开通,则为空。
f9f2c03dbe1bfe3adfd52
qr_pay_mode
扫码支付方式
扫码支付的方式,支持前置模式和跳转模式。
前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以iframe方式请求支付宝页面。具体分为以下3种:
0:订单码-简约前置模式,对应iframe宽度不能小于600px,高度不能小于300px;
1:订单码-前置模式,对应iframe宽度不能小于300px,高度不能小于600px;
3:订单码-迷你前置模式,对应iframe宽度不能小于75px,高度不能小于75px。
4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小。
跳转模式下,用户的扫码界面是由支付宝生成的,不在商户的域名下。
2:订单码-跳转模式
qrcode_width
商户自定二维码宽度
商户自定义的二维码宽度。
当qr_pay_mode=4时,该参数生效。
need_buyer_realnamed
是否需要买家实名认证
是否需要买家实名认证。
T表示需要买家实名认证;
不传或者传其它值表示不需要买家实名认证。
promo_param
商户优惠活动参数
String(128)
商户与支付宝约定的营销透传参数。
{"customer201412":"Y","goods201412":"Y"}
hb_fq_param
花呗分期参数
参数格式:hb_fq_seller_percent ^卖家承担付费比例|hb_fq_num ^期数。
hb_fq_num:花呗分期数,比如分3期支付;
hb_fq_seller_percent:卖家承担收费比例,比如50代表卖家承担50%。
两个参数必须一起传入。
两个参数用&|&间隔。Key和value之间用&^&间隔。
具体花呗分期期数和卖家承担收费比例可传入的数值请咨询支付宝。
hb_fq_seller_percent^50|hb_fq_num^3
goods_type
商品类型:
1表示实物类商品
0表示虚拟类商品
如果不传,默认为实物类商品。
从官网给出的参数列表可以知道必须的参数有10个,
其中 service、partner、_input_charset、seller_id、payment_type、sign_type、sign 都可以通过 alipay.config.php 配置文件获取, 此外还必须传入out_trade_no、subject、total_fee。
五. 调用 AlipaySubmit 类中的 buildRequestForm 方法 传入数组参数、提交方式(post) 和 提交按钮。
1 $parameter = array(
=& trim($alipay_config[‘service‘]),
=& trim($alipay_config[‘partner‘]),
"seller_email"
=& trim($alipay_config[‘seller_email‘]),
"payment_type"
=& trim($alipay_config[‘payment_type‘]),
"notify_url"
=& $notify_url,//异步回调
"return_url"
=& $return_url,//同步回调
"out_trade_no"
=& $ordernum,//订单号
=& $subject,
"total_fee"
=& $total_fee,
"show_url"
=& $show_url,
"anti_phishing_key"
=& $anti_phishing_key,
"exter_invoke_ip"
=& $exter_invoke_ip,
"extra_common_param"
=& $extra_common_param,
"_input_charset"
=& trim(strtolower($alipay_config[‘input_charset‘]))
//建立请求
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit-&buildRequestForm($parameter,"post", "");
echo $html_text;
六.& 支付宝提交参数进行支付时获取签名的流程(sign_type、sign不参加签名)并以表单方式发送请求:
  1.先调用buildRequestPara($para_temp)方法 将传入的参数进行处理(排序签名);
  2.paraFilter($para_temp)方法是对数组中的空值和签名参数(sign_type、sign)进行排除;
  3.argSort($para_filter)方法是对数组进行排序;
  4.$this-&buildRequestMysign($para_sort)方法是将数组进行签名(把数组所有元素,按照&参数=参数值&的模式用&&&字符拼接成字符串);
  5.在buildRequestMysign方法中数组参数和配置文件(alipay.config.php)中key参数进行MD5加密返回签名字符串;
  6.最后将签名字符串和签名类型也加入请求数组参数中;
  7.将请求参数进行循环组装成表单弹出新页面自动提交表单。
1 $sHtml = "&form id=‘alipaysubmit‘ name=‘alipaysubmit‘ action=‘".$this-&alipay_gateway_new."_input_charset=".trim(strtolower($this-&alipay_config[‘input_charset‘]))."‘ method=‘".$method."‘&";
while (list ($key, $val) = each ($para)) {
$sHtml.= "&input type=‘hidden‘ name=‘".$key."‘ value=‘".$val."‘/&";
//submit按钮控件请不要含有name属性
$sHtml = $sHtml."&input type=‘submit‘ value=‘".$button_name."‘&&/form&";
$sHtml = $sHtml."&script&document.forms[‘alipaysubmit‘].submit();&/script&";
return $sHtml;
七.支付成功后的回调 (回调页面已经传给支付宝服务器,支付宝服务器会在支付完成后对支付回调页面进行请求并传回支付参数)
  1.页面同步回传的参数(通知地址:‘return_url‘)
参数参数名称类型(字节长度)参数说明是否可为空样例
is_success
表示接口调用是否成功,并不表明业务处理结果。
DSA、RSA、MD5三个值可选,必须大写。
String(32)
b1afe845ebe40b8e0e733729
out_trade_no
商户网站唯一订单号
String(64)
对应商户网站的订单系统中的唯一订单号,非支付宝交易号。需保证在商户网站中的唯一性。是请求时对应的参数,原样返回。
String(256)
商品的标题/交易标题/订单标题/订单关键字等。
payment_type
只支持取值为1(商品购买)。
标志调用哪个接口返回的链接。
create_direct_pay_by_user
支付宝交易号
String(64)
该交易在支付宝系统中的交易流水号。最长64位。
trade_status
交易目前所处的状态。成功状态的值只有两个:TRADE_FINISHED(普通即时到账的交易成功状态);TRADE_SUCCESS(开通了高级即时到账或机票分销产品后的交易成功状态)
TRADE_FINISHED
通知校验ID
支付宝通知校验ID,商户可以用这个流水号询问支付宝该条通知的合法性。
RqPnCoPT3K9%2Fvwbh3I%2BODmZS9o4qChHwPWbaS7UMBJpUnBJlzg42y9A8gQlzU6m3fOhG
notify_time
通知时间(支付宝时间)。格式为yyyy-MM-dd HH:mm:ss。
notify_type
返回通知类型。
trade_status_sync
seller_email
卖家支付宝账号
String(100)
卖家支付宝账号,可以是Email或手机号码。
buyer_email
买家支付宝账号
String(100)
买家支付宝账号,可以是Email或手机号码。
卖家支付宝账户号
String(30)
卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。
买家支付宝账户号
String(30)
买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,],精确到小数点后两位。
String(1000)
对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
extra_common_param
公用回传参数
用于商户回传参数,该值不能包含&=&、&&&等特殊字符。如果用户请求时传递了该参数,则返回给商户时会回传该参数。
你好,这是测试商户的广告。
  根据 trade_status 的状态可以知道订单的支付状态可以进行对支付成功后的业务逻辑处理。注意 通过GET获取参数。
if($_GET[‘trade_status‘] == ‘TRADE_FINISHED‘ || $_GET[‘trade_status‘] == ‘TRADE_SUCCESS‘) {
//不管普通或者高级 都执行此处
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//如果有做过处理,不执行商户的业务程序
  因为订单有可能已经通过异步进行处理了,所以需要先进行判断订单是否已经处理,如果处理就不再处理直接展示成功页面,如果未处理就处理业务后展示成功页面。
  2.页面异步回传的参数(通知地址:‘notify_url‘)
参数参数名称类型(字节长度)参数说明是否可为空样例
notify_time
通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。
notify_type
通知的类型。
trade_status_sync
通知校验ID
通知校验ID。
70fec0c5af
DSA、RSA、MD5三个值可选,必须大写。
_p_w_l_h_j0b_gd_aejia7n_ko4_m%2Fu_w_jd3_nx_s_k_mxus9_hoxg_y_r_lunli_pmma29_t_q%3D
out_trade_no
商户网站唯一订单号
String(64)
对应商户网站的订单系统中的唯一订单号,非支付宝交易号。需保证在商户网站中的唯一性。是请求时对应的参数,原样返回。
String(256)
商品的标题/交易标题/订单标题/订单关键字等。它在支付宝的交易明细中排在第一列,对于财务对账尤为重要。是请求时对应的参数,原样通知回来。
payment_type
只支持取值为1(商品购买)。
支付宝交易号
String(64)
该交易在支付宝系统中的交易流水号。最长64位。
trade_status
取值范围请参见。
TRADE_FINISHED
gmt_create
交易创建时间
该笔交易创建的时间。格式为yyyy-MM-dd HH:mm:ss。
gmt_payment
交易付款时间
该笔交易的买家付款时间。格式为yyyy-MM-dd HH:mm:ss。
交易关闭时间
交易关闭时间。格式为yyyy-MM-dd HH:mm:ss。
refund_status
取值范围请参见。
REFUND_SUCCESS
gmt_refund
卖家退款的时间,退款通知时会发送。格式为yyyy-MM-dd HH:mm:ss。
seller_email
卖家支付宝账号
String(100)
卖家支付宝账号,可以是email和手机号码。
buyer_email
买家支付宝账号
String(100)
买家支付宝账号,可以是Email或手机号码。
卖家支付宝账户号
String(30)
卖家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。
买家支付宝账户号
String(30)
买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。
如果请求时使用的是total_fee,那么price等于total_fee;如果请求时使用的是price,那么对应请求时的price参数,原样通知回来。
该笔订单的总金额。请求时对应的参数,原样通知回来。
如果请求时使用的是total_fee,那么quantity等于1;如果请求时使用的是quantity,那么对应请求时的quantity参数,原样通知回来。
String(1000)
该笔订单的备注、描述、明细等。对应请求时的body参数,原样通知回来。
支付宝系统会把discount的值加到交易金额上,如果需要折扣,本参数为负数。
is_total_fee_adjust
是否调整总价
该交易是否调整过价格。
use_coupon
是否使用红包买家
是否在交易过程中使用了红包。
extra_common_param
公用回传参数
用于商户回传参数,该值不能包含&=&、&&&等特殊字符。如果用户请求时传递了该参数,则返回给商户时会回传该参数。
你好,这是测试商户的广告。
business_scene
是否扫码支付
回传给商户此标识为qrpay时,表示对应交易为扫码支付。目前只有qrpay一种回传值。非扫码支付方式下,目前不会返回该参数。
&  根据 trade_status 的状态可以知道订单的支付状态可以进行对支付成功后的业务逻辑处理。注意 通过POST获取参数。
   trade_status 的状态
触发条件名触发条件描述触发条件默认值
TRADE_FINISHED
true(触发通知)
TRADE_SUCCESS
true(触发通知)
WAIT_BUYER_PAY
false(不触发通知)
TRADE_CLOSED
false(不触发通知)
  因为订单有可能已经通过同步进行处理了,所以需要先进行判断订单是否已经处理,如果处理就不再处理,如果未处理就处理业务。
  注意:
&程序执行完后必须打印输出&success&(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
当商户收到服务器异步通知并打印出success时,服务器异步通知参数notify_id才会失效。
验证是否是支付宝发来的通知 :&
     请求的完整链接 https:
     返回数据(纯文本)成功时:true,不成功时:报对应错误。
&业务数据处理:
     商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,并判断total_fee是否确实为该订单的 实际金额(即商户订单创建时的金额),同时需要校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔          单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email),上述有任何一个 验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处           理,并且过滤重复的通 知结果数据。在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。 如果商户需要对同步返回的数据做验签,必须通过服务端的签名验签代码逻辑          来实现。如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。
     交易状态TRADE_SUCCESS的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功;
     交易状态TRADE_FINISHED的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功;或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限;
     交易成功之后,商户(高级即时到账或机票平台商)可调用批量退款接口,系统会发送退款通知给商户,具体内容请参见批量退款接口文档;
     当商户使用站内退款时,系统会发送包含refund_status和gmt_refund字段的通知给商户。
        
      
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/LzayCat/p/5539095.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!

我要回帖

更多关于 支付宝如何增加收款人 的文章

 

随机推荐