小白接入支付宝支付—PHP版(超详细教程)

       身为一个phper,相信支付接入是每个人都必须会需要使用的一门技能,但是如果完全没有接过支付的童鞋,尤其是小白,在听到唤起支付,支付回调。。。等等的名词,绝对头痛。这时候如果有一遍超详细的文档,必定能达到事半功倍的效果。

       好了废话不多说,我这篇文档主要针对初入坑的小白,只要你认真的照着我的文档去开发,轻松拿下支付宝支付。


一、【搭建和配置开发环境】

1、申请开通支付权限(这里是需要商家用户才能进行申请的,个人用户不支持)

b.alipay.com/signing/aut…


2、进入-》开发者中心-》网页&移动开发,确保应用状态已生效

open.alipay.com/platform/ma…


3、点击右侧相应应用详情,进入签约相关功能,注意!必须应用生效后再进行签约功能,否则功能不生效



4、进入商家个人中心




5、下载公钥生成器(如果你安装了360,请在下载前关闭它,这是一个坑),图示是已经下载配置好的画面,如果你还没下载,点击后会提示下载的地址

可以看到这里有一个支付跳转地址,其实就是用户支付完成后跳回你想要让用户跳转的地址。




6、将生成的商户公钥填入,会自动生成支付宝公钥,下列是生成的秘钥,到开私钥位置,图中的文件即为个人私钥




7、ok,到这一步,我们的文件获取就算完成了,接下来,查看下官方文档,看下要调起支付宝支付,我们需要传递过去什么参数



二、【接入demo】

1、这里推荐使用数据库创建一个表,用于存储支付宝的相关资料,方便之后的开发(当然,如果为了保密,你可以在存储的时候加多一层加密,取出的时候解密就可以了)


        字段类型需要稍稍注意下,私钥和公钥需要用txt存储,否者容易长度不足。

还有一点,商户私钥,在打开我们的私钥文件的时候是长这样的


        中间红框部分才是我们需要的,在作为参数传给支付宝的时候,你必须将其作为一段字符串,去头去尾,去空格回车


2、进入官方接入文档,下载demo

docs.open.alipay.com/203/105910/



3、使用demo进行支付调起测试,这里使用本地环境就可以了,不需要测试环境或者线上环境,如果你的应用还未生效,可以使用沙盒模式去进行调试



4、配置配置文件,找到你下载好的demo,在主目录下找到config.php



       配置成如下即可,如果你没有选择存储到数据库,可以将所有参数都作为字符串存进来,也是一样的



三、【实际项目使用】

1、在本地环境运行demo

         正常这时候你已经可以直接支付金额了的,没错,直接通过demo进行支付,当然,我们在实际开发中,其实并不会这么干,需要对demo进行重新封装,让他成为适合我们的函数。

        在这之前,我们要明白整个支付到底是这么的一个流程:



2、支付宝调起支付函数

       通过查看demo里的index.php,我们可以看到手机web支付,使用的是wappay文件夹里的pay.php,打开该文件

        可以看到我们这里最后是引用了一个wapPay的方法,

         payRequestBuilder:为调起支付宝的相关参数

         return_url:为支付完成后的跳转地址,前面的【搭建和配置开发环境-第5步】有提及在哪里配置

         notify_url:为回调地址,每次支付成功后,支付宝都会来访问这个地址,并带上相应的参数


       这里的代码,就是开始调起支付宝支付了,把它抽出来,封装成一个方法



       把你自己需要的订单信息传进来,构造相应的信息即可

       这里有一个参数,公共回传参数,如果你使用了这个参数,支付宝将会在回调的时候一起把参数以json的格式传回来给你,但是打开AlipayTradeWapPayContentBuilder类,你是找不到相应的构造方法的,我们模拟支付宝demo写一个。



         打开AlipayTradeWapPayContentBuilder类,构造以下方法,然后调用就可以了,同样的,你如果需要其他参数,类里没有方法的话,可以自己构造,但是注意是setXXX,getXXX两个方法


public function setPassbackParams($passback_params)
{
    $this->passback_params = $passback_params;
    $this->bizContentarr['passback_params'] = $passback_params;
}

public function getPassbackParams()
{
    return $this->passback_params;
}
复制代码

         这一步做完,你应该就能在项目里调起自己的支付宝支付了,但是,支付还没做完呢,有一个支付回调的流程。


3、处理支付回调

        每次支付完成后,支付宝会以POST的方式,给我们发来一个数组,数组大概长这样的:


我们这里需要做如下的几步操作:
  • 对回调的参数进行一个验签的操作;
  • 根据回调参数,改变系统订单状态;
  • 书写自己的系统逻辑;
  • 告诉支付宝成功接收到回调。
第一步,验签:
        在验签之前,根据支付宝返回的外部订单号(out_trade_no)其实就是我们系统自己的内部订单号,去查一遍,看看订单是否真的存在,不存在,就没必要进行下去了


     1)在通知返回参数列表中,除去sign、sign_type两个参数外,凡是通知返回回来的参数皆是待验签的参数。


     2)将剩下参数进行url_decode, 然后进行字典排序,组成字符串,得到待签名字符串。


     3)将签名参数(sign)使用base64解码为字节码串。


     4)使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及支付宝公钥验证签名。


     5)需要严格按照如下描述校验通知数据的正确性。
           1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
           2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
           3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的 操作方(有的时候,一个商户可能有多个seller_id/seller_email),
           4、验证app_id是否为该商户本身。上述1、2、3、4有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。


注意:
  • 状态TRADE_SUCCESS的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功;
  • 交易状态TRADE_FINISHED的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功;或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限。

第二步,改变订单状态:
        找出自己的订单,把相应的信息填上去就好了,这一步很简单


第三步,写入自己的系统逻辑:
         这一步,建议将自己系统的逻辑完整得封装成一个类,我们这里直接调用逻辑类的主方法就可以了,代码的逻辑层次尽量分明。


第四步,告诉支付宝:

function verify_result($result)
{
    if ($result) {
        echo 'success';
    } else {
        echo 'fail';
    }
}
复制代码

注意!成功时一定要返回的是字符串“success”,否则支付宝将重复进行回调操作 ,就是不断的来访问你的服务器。


OK,支付宝整个就接好了


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值