支付宝支付流程 及简单实现

                                             卖家账号  】
                                             合作者id
                                             秘钥

                                             订单号
                                             支付金额
                                             回调地址[同步,异步]
                                             签名

                                             支付状态

                                             买家信息
                            POST返回参数--->【
                            H
                            H[返回数据]
                            H
用户通过提交订单-------->支付宝------>各大银行
                    H
                    H
       GET请求参数-->【    卖家账号
                          合作者id
                          秘钥

                          订单号
                          支付金额
                          回调地址 [同步,异步]
                          签名[
                                 过滤字符串
                                 排序数组
                                 &拼接代签名串
                                 拼接key 新的字符串
                                 md5(加密字符串)
                              ]
                       】
<?php
header("Content-type:text/html;charset=utf-8");

// ******************************************************配置 start*************************************************************************************************************************
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//合作身份者id,以2088开头的16位纯数字
$alipay_config['partner']      = '';
//收款支付宝账号
$alipay_config['seller_email'] = '';
//安全检验码,以数字和字母组成的32位字符
$alipay_config['key']          = '';
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//签名方式 不需修改
$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';
// ******************************************************配置 end*************************************************************************************************************************

// ******************************************************请求参数拼接 start*************************************************************************************************************************
$parameter = array(
    "service" => "create_direct_pay_by_user",
    "partner" => $alipay_config['partner'], // 合作身份者id
    "seller_email" => $alipay_config['seller_email'], // 收款支付宝账号
    "payment_type"  => '1', // 支付类型
    "notify_url"    => "http://www.php.com/pay/pay1.php", // 服务器异步通知页面路径http://localhost/res.php
    "return_url"    => "http://www.php.com/pay/pay2.php", // 页面跳转同步通知页面路径http://localhost/notify.php
    "out_trade_no"  => "14277411312108812", // 商户网站订单系统中唯一订单号
    "subject"   => "订单", // 订单名称
    "total_fee" => "0.01", // 付款金额
    "body"  => "1409phpAB", // 订单描述 可选
    "show_url"  => "", // 商品展示地址 可选
    "anti_phishing_key" => "", // 防钓鱼时间戳  若要使用请调用类文件submit中的query_timestamp函数
    "exter_invoke_ip"   => "", // 客户端的IP地址
    "_input_charset"    => 'utf-8', // 字符编码格式
);
// 去除值为空的参数
foreach ($parameter as $k => $v) {
    if (empty($v)) {
        unset($parameter[$k]);
    }
}

// 参数排序
ksort($parameter);
reset($parameter);

// 拼接获得sign
$str = "";
foreach ($parameter as $k => $v) {
    if (empty($str)) {
        $str .= $k . "=" . $v;
    } else {
        $str .= "&" . $k . "=" . $v;
    }
}
echo $str;die;
$parameter['sign'] = md5($str . $alipay_config['key']); // 签名
$parameter['sign_type'] = $alipay_config['sign_type'];
print_r($parameter);die;

// ******************************************************请求参数拼接 end*************************************************************************************************************************


// ******************************************************模拟请求 start*************************************************************************************************************************
$sHtml = "<table border='1'><form id='alipaysubmit' name='alipaysubmit' action='https://mapi.alipay.com/gateway.do?_input_charset=utf-8' method='get'>";
foreach ($parameter as $k => $v) {
    $sHtml.= "<tr ><td>$k</td><td><input type='type' name='" . $k . "' value='" . $v . "' style='width:400px'/></td></tr>";
}

$sHtml .= '<tr><input type="submit" value="去支付"></tr></table>';

/*

// ******************************************************模拟请求 end*************************************************************************************************************************
//var_dump($sHtml);
echo $sHtml;

?>
#支付宝的 同步通知 和 异步通知
现支付宝的通知有两类。
【异步】A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式
【同步】B页面跳转通知,对应的参数为return_url,支付宝通知使用GET方式 (通知地址不需要像以前一样去账户内设置,而是由客户在支付的时候通过参数传递给我地址。
1. 确认您使用的接口是用notify_url还是return_url。
2. notify_url为服务器通知,支付宝可以保证99.9999%的通知到达率,前提是您的网络通畅。
3. return_url为网页重定向通知,是由客户的浏览器触发的一个通知,若客户去网银支付,也会受银行接口影响,由于各种影响因素特别多,所以该种类型的通知支付宝不保证其到达率。
买家付款成功后,会跳到 return_url所在的页面,这个页面可以展示给客户看,这个页面只有付款成功才会跳转,并且只跳转一次..
notify_url: 服务器后台通知,这个页面是支付宝服务器端自动调用这个页面的链接地址,这个页面根据支付宝反馈过来的信息修改网站的定单状态,更新完成后需要返回一个success给支付宝.,不能含有任何其它的字符包括html语言.
流程:买家付完款(trade_status=WAIT_SELLER_SEND_GOODS)--->支付宝通知 notify_url--->如果反馈给支付宝的是success(表示成功,这个状态下不再反馈,如果不是继续通知,一般第一次发送和第二次发送的时间间隔是3分钟)
#支付宝即时到账 和非即时到账
即时到账交易:操作成功后资金是立即打给对方账户的,实时到账,没有确认收货的环节,需谨慎操作;

担保交易:买家先付款到支付宝,满意后在规定时间内确认收货或超出时间后由支付宝打款给卖家
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值