TP5完成付出宝电脑网站付出进修笔记

这两天在公司做一个小型WEB项目,须要有付出功用。第一次做付出宝的付出,踩了点小坑,还算顺遂。冲动的我赶忙记下完成的流程。
第一步固然是在付出宝开放平台请求公钥私钥APPID等,付出宝关官方文档都有细致引见,这里就省略。
请求完了下面最先开辟者的完成流程。首先是下载付出宝的官方DEMO,网址是https://docs.open.alipay.com/… 这里发起下载官方的DEMO而不是SDK,由于对新手来讲DEMO里有封装好的函数能够直接拿来改改就用,比较友爱。今后手艺提升了,再拿SDK玩玩。
《TP5完成付出宝电脑网站付出进修笔记》

由于我是个PHPer,固然挑选PHP版。下载好以后默许名字是alipay.trade.page.pay-PHP-UTF-8,发起改名字为alipay即可。
由于我是用TP5开辟,所以放到项目根目次下的外部资本包vendor目次中。
《TP5完成付出宝电脑网站付出进修笔记》

放进去以后,找到alipay目次下pagepay目次下的pagepay.php文件,这便是阿里官方供应的付出要领样例,
《TP5完成付出宝电脑网站付出进修笔记》
我学着网上一名学长的写法改了一下放到TP5的要领中,见下图:
《TP5完成付出宝电脑网站付出进修笔记》
走到这里假如顺遂,便会涌现付出宝的二维码页面。我这里由于客户从新请求权限所以没法截图了。就是谁人付出宝二维码的页面。扫码付出,便会跳转到付出胜利页面,末了会跳到你自定义的同步跳转地点。

价钱由前台表单传值即可,这里强调有三个必填项:定单号、定单称号、付款金额,这三个缺哪个都邑报错。我刚最先脑壳发晕,把定单称号去掉了,效果报错了…
这里写完以后,便去config.php设置各项参数,config.php在alipay的根目次下,设置这一项至关主要。假如错了,商家但是收不到款的噢…
这里是傻瓜填法,运用ID、私钥、异步地点、同步地点、公钥。这6项必需填准确。由于我是用的TP5,所以关照地点那边我改成了TP5的写法,模块/控制器/要领.
付出宝网关那边不要变动,假如是沙箱环境,须要改成”https://openapi.alipaydev.com/gateway.do” 多了个”dev”,由于我是实在环境,所以就不必变动。

《TP5完成付出宝电脑网站付出进修笔记》

这里再说一下异步和同步地点,新人一定不晓得是有什么用,大佬略过即可。付出宝付出胜利后会实行这两个要领,体系会把你付出的信息用POST体式格局异步传给你的要领。由于是异步,所以页面是没有变化的,所谓”打枪的不要,悄悄地进村…”在异步这个要领里能够写你本身的营业逻辑。比方吸收值,存入数据库之类。这里有个大坑,坑了我两天即在异步要领里是没法用session取值的,我底本想用session取用户登录id存入数据库中,厥后问了师傅才晓得,异步是服务器和服务器之间的交互,所以没有cookieId,没有cookieId固然没有session值。对这里不懂的童鞋能够温习下session基础知识,忸捏,我竟然把这么基础的东西忘了…由此可知,同步要领是能够取session的,由于是服务器和客户端的交互。假如对此没观点,能够在异步要领吸收参数后转成JSON花样,然后用file_put_contents()函数写到记事本里看一下。
例:{

"gmt_create":"xxxxxxxx",//定单建立时候
"charset":"UTF-8",
"gmt_payment":"xxxxxxxx", //付款时候
"notify_time":"xxxxx",   //异步回调时候
"subject":"XXXXX",     //定单称号
"sign":"xxxxxxxxxxxxxxxxxxx",
"buyer_id":"xxxxxxxx",
"invoice_amount":"xxxxx",
"version":"1.0",
"notify_id":"xxxxxxxxx",
"fund_bill_list":"[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]",
"notify_type":"trade_status_sync",
"out_trade_no":"xxxxxxxx", //定单号
"total_amount":"0.01",
"trade_status":"TRADE_SUCCESS", //success代表付出胜利,商家会收到钱
"trade_no":"xxxxxx", //付出宝流水号
"auth_app_id":"xxxxxxxx",
"receipt_amount":"0.01",
"point_amount":"0.00",
"app_id":"xxxxxxxxx",
"buyer_pay_amount":"0.01",
"sign_type":"RSA2",
"seller_id":"xxxxxxxxxxxxx"

}
主要的我都加了解释了,其他不明白的参数能够去官方文档查询。
同步要领,望文生义,就是页面同步跳转的地点,即能让客户瞥见的页面。这里自定义即可,比方提醒用户付出胜利之类笔墨。
下面是异步和同步要领的示例写法:
/**

  • 异步同步示例

*/
class Alipay extends Controller {

    
/**
 * 异步要领
 * @return [void] 
 */
public function notify(){
    $post = input();
    if($post['trade_status'] == "TRADE_SUCCESS"){
        //操纵数据库 修正状况
        echo "SUCCESS";//返回给付出宝胜利 ,不返回这个  字符 ,付出宝定时 回调这个要领 时候 5   10   30/m  1小时 胜利为止
    }
    //写在文本里看一下参数
    $data = json_encode($post);
    file_put_contents("alipaytext.txt",$data);
}

/**
 * 同步要领
 * @return [type] [description]
 */
public function returnfy(){
    //同步跳转地点
    return $this->fetch();
}

}
这内里主要的是须要在异步要领里推断trade_status字段,假如即是”TRADE_SUCCESS”即付出胜利,背面必需echo返回一个”SUCCESS”,不然付出宝会以为你没有付款胜利,而在24小时内定时回调这个要领。现实营业逻辑依据你的需求来比方存入定单表等等,固然不会这么简朴,最好加一些考证。为了平安。下面是前台代码示例:
{include file=”public/header”}

<!-- HEADER END -->
<!-- CONTENT BEGIN -->
<div id="content" class="right_sidebar">
    <div class="inner">
        <div class="general_content">
            <div class="main_content">    
                <form name=alipayment action="{:url('index/alipay/index')}" method="post">
                商户定单号:<input type="text" name="out_trade_no" value="123" /><br/>
                定单称号:<input type="text" name="t_name" value="a"/><br/>
                付款金额:<input type="text" name="total_amount" /><br/>
                商品形貌:<input type="text" name="t_body" value=""/><br/>
                <button type="submit">付 款</button>
            </form>

            </div>
            {include file="public/right"}

            <div class="separator" style="height:31px;"></div>
            <div class="clearboth"></div>
        </div>
    </div>
</div>
<!-- CONTENT END -->

<!-- FOOTER BEGIN -->

{include file=”public/tail”}

末了补上一句:日记文件一定要开启写权限,不然没法自动写入。即在alipay文件夹下右键log.txt属性设置。出了题目能够在日记里检察。

走到这里,流程就基础引见完了。迎接列位大佬拍砖指点。做完付出,会觉得本身又上了一个台阶!

    原文作者:清浅
    原文地址: https://segmentfault.com/a/1190000018335771
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞