线上支付支付宝个人支付接入流程详解

23 篇文章 0 订阅
2 篇文章 0 订阅

一直以为想做线上支付必须要有营业执照,害得我和很多个人开发者一样,绕了很多圈子。尝试过一些第三方的接入(不稳定,担心跑路)。
原来支付宝是有个人支付接口的,利用支付宝的“当面付”接口就可实现个人版的线上支付,实时直接进入个人账户。

我需要在网站上实现一个打赏功能,首先需要在 支付宝开发者中心 申请一个网页&移动应用,如图
在这里插入图片描述
然后需要在能力列表添加“当面付”功能,签约的时候营业执照没有红色*,说明不是必填项,其他的功能签约时营业执照都是必填项。
在这里插入图片描述

签约成功后,下载SDK填写相应的配置进行调试
http://aopsdkdownload.cn-hangzhou.alipay-pub.aliyun-inc.com/demo/F2FPay_Demo_php.zip

配置文件是 f2fpay/config/config.php
在这里插入图片描述
支付宝公钥和商户私钥是通过支付宝开放平台开发助手生成的,可以在下图的选项里进行设置和查看在这里插入图片描述
然后回调地址必须是一个线上能够访问到的地址。
配置完成后就可以在本地进行调试
在这里插入图片描述
支付宝返回的是一个二维码串,需要用专门的转换api进行转成成功二维码图片,支付宝官方用的二维码串转换工具是google的api,在我机器上图片是显示不出来的,应该是需要VPN才能使用,所有我从网上又找了一个api。
在这里插入图片描述
支付二维码能够正常显示后说明调试通了,就可以部署到项目中进行应用了,我的项目后端是PHP的框架TP5写的,以下介绍在框架中的具体应用。

支付流程:

1 : 页面点击成为好货推荐,调用订单生成接口,传商品id和登录用户id
2 : 订单接口生成订单数据,未支付状态,并将生成的 订单号、订单名称、订单金额 处理后通过curl访问调用二维码的文件并返回前端二维码图片src路径和订单id
3 : 用户支付成功后在回调方法里将回调数据写入日志文件,如果支付成功,根据回调数据里的订单号更新此订单的支付状态,以及其他的支付信息;
4 : 前端拿到二维码的src路径和订单id后,将二维码展示给用户,并利用ajax携带订单id参数每隔1秒请求订单状态接口,如果订单状态为已支付,提示“支付成功”

ThinkPHP5接入支付宝“当面付”流程

1.根据官方SDK里的 qrpay_test.php 文件的写法,把html部分删掉,不必要的请求参数删掉,返回格式json处理一下
在这里插入图片描述
2. 生成订单并返回二维码的路径及订单id
在这里插入图片描述
3. 回调处理
在这里插入图片描述
最后奉上订单方法里用到的生成待请求字符串的方法和cURL的方法,这些方法放到了公共文件common.php中

/**
 * 生成待请求字符串
 * @param $paramArr
 * @param bool|true     $sort       是否排序           默认排序
 * @param bool|false    $encode     是否urlencode处理  默认不处理
 * @param bool|false    $isnull     是否过滤空值字段   默认不过滤
 * @param string|&      $str        链接字符           默认&
 * @return string 返回待签字符串
 */
function createSignStr ($paramArr, $sort = true, $encode = false, $isnull = false, $str = '&') {
    $param_array   = array();
    if($sort){
        ksort ( $paramArr );
        reset ( $paramArr );
    }
    foreach ($paramArr as $key => $val) {
        //$val = mb_convert_encoding($val,"GBK", "UTF-8");
        if($isnull){
            if($val === ''){
                unset($paramArr[$key]);
            }else{
                if($encode){
                    $param_array[] = $key.'='.urlencode($val);
                }else{
                    $param_array[] = $key.'='.$val;
                }
            }
        }else{
            if($encode){
                $param_array[] = $key.'='.urlencode($val);
            }else{
                $param_array[] = $key.'='.$val;
            }
        }
    }
    $param_str  = implode($str,$param_array);
    return $param_str;
}

/**
 * 发送请求
 * @param $opts     //已加密字符串
 * @param $url      //发送地址
 * @return mixed    //返回支付返回信息
 */
function sendHttpRequest($opts, $url) {
    $ch     = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $url );
    curl_setopt ( $ch, CURLOPT_POST, 1 );
    curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false);//不验证证书
    curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false);//不验证HOST
    curl_setopt ( $ch, CURLOPT_SSLVERSION, 1);
    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $opts );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
    // 运行cURL,请求网页
    $html = curl_exec ( $ch );
    curl_close ( $ch );
    return $html;
}

到此整个流程就结束了,希望对你有所帮助,如有疑惑需要帮忙可以在下方留言或加我qq:1298025852

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值