thinkphp整合系列之支付宝MD5加密方式扫码支付-码支付

最简单的ThinkPHP3.2.3封装微信支付V3接口

这篇文章主要为大家详细介绍了php支付宝在线支付接口开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下1.什么是第三方支付  所谓第三方支付,就是一些和各大银行签约、并具备一定实...

支付宝的作用就不废话了;
反正在天朝是个网站用到支付;都首先要考虑支付宝了;
支付宝有两种加密方式;MD5和RSA;
MD5加密方式比较简单些;可以用在pc端的扫码支付;
今个要讲的就是这个;
此处略过500字的注册账号获取key的过程;直奔主题;
示例项目:https://github.com/baijunyao/thinkphp-bjyadmin
一:导入sdk
/ThinkPHP/Library/Vendor/Alipay
需要说明的是;这个sdk原本是担保支付的;
后来被我改成即时到账的;
所以;如果如果按我这篇文章整合;就需要下载示例项目;
然后拷贝Alipay了;
二:配置项
/Application/Common/Conf/config.php

    'ALIPAY_CONFIG'          => array(
        'partner'            => '', // partner 从支付宝商户版个人中心获取
        'seller_email'       => '', // email 从支付宝商户版个人中心获取
        'key'                => '', // key 从支付宝商户版个人中心获取
        'sign_type'          => strtoupper(trim('MD5')), // 可选md5  和 RSA
        'input_charset'      => 'utf-8', // 编码 (固定值不用改)
        'transport'          => 'http', // 协议  (固定值不用改)
        'cacert'             => VENDOR_PATH.'Alipay/cacert.pem',  // cacert.pem存放的位置 (固定值不用改)
        'notify_url'         => 'http://baijunyao.com/Api/Alipay/alipay_notify', // 异步接收支付状态通知的链接
        'return_url'         => 'http://baijunyao.com/Api/Alipay/alipay_return', // 页面跳转 同步通知 页面路径 支付宝处理完请求后,当前页面自 动跳转到商户网站里指定页面的 http 路径。 (扫码支付专用)
        'show_url'           => 'http://baijunyao.com/User/Order/index', // 商品展示网址,收银台页面上,商品展示的超链接。 (扫码支付专用)
        'private_key_path'   => '', //移动端生成的私有key文件存放于服务器的 绝对路径 如果为MD5加密方式;此项可为空 (移动支付专用)
        'public_key_path'    => '', //移动端生成的公共key文件存放于服务器的 绝对路径 如果为MD5加密方式;此项可为空 (移动支付专用)
        ),

好吧;注释我已经写的比较清楚了;今个我们讲的是pc端的扫码支付;
可以先无视private_key_path、public_key_path这两个参数;其他的就是填空题了;
三:支付函数
/Application/Common/Common/function.php

/**
 * 跳向支付宝付款
 * @param  array $order 订单数据 必须包含 out_trade_no(订单号)、price(订单金额)、subject(商品名称标题)
 */
function alipay($order){
    vendor('Alipay.AlipaySubmit','','.class.php');
    // 获取配置
    $config=C('ALIPAY_CONFIG');
    $data=array(
        "_input_charset" => $config['input_charset'], // 编码格式
        "logistics_fee" => "0.00", // 物流费用
        "logistics_payment" => "SELLER_PAY", // 物流支付方式SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
        "logistics_type" => "EXPRESS", // 物流类型EXPRESS(快递)、POST(平邮)、EMS(EMS)
        "notify_url" => $config['notify_url'], // 异步接收支付状态通知的链接
        "out_trade_no" => $order['out_trade_no'], // 订单号
        "partner" => $config['partner'], // partner 从支付宝商户版个人中心获取
        "payment_type" => "1", // 支付类型对应请求时的 payment_type 参数,原样返回。固定设置为1即可
        "price" => $order['price'], // 订单价格单位为元
        // "price" => 0.01, // // 调价用于测试
        "quantity" => "1", // price、quantity 能代替 total_fee。 即存在 total_fee,就不能存在 price 和 quantity;存在 price、quantity, 就不能存在 total_fee。 (没绕明白;好吧;那无视这个参数即可)
        "receive_address" => '1', // 收货人地址 即时到账方式无视此参数即可
        "receive_mobile" => '1', // 收货人手机号码 即时到账方式无视即可
        "receive_name" => '1', // 收货人姓名 即时到账方式无视即可
        "receive_zip" => '1', // 收货人邮编 即时到账方式无视即可
        "return_url" => $config['return_url'], // 页面跳转 同步通知 页面路径 支付宝处理完请求后,当前页面自 动跳转到商户网站里指定页面的 http 路径。
        "seller_email" => $config['seller_email'], // email 从支付宝商户版个人中心获取
        "service" => "create_direct_pay_by_user", // 接口名称 固定设置为create_direct_pay_by_user
        "show_url" => $config['show_url'], // 商品展示网址,收银台页面上,商品展示的超链接。
        "subject" => $order['subject'] // 商品名称商品的标题/交易标题/订单标 题/订单关键字等
    );
    $alipay=new \AlipaySubmit($config);
    $new=$alipay->buildRequestPara($data);
    $go_pay=$alipay->buildRequestForm($new, 'get','支付');
    echo $go_pay;
}

同样;看注释就行了;
调用方法;

$data=array(
    'out_trade_no'=>time(),
    'price'=>1,
    'subject'=>'测试'
    );
alipay($data);

如果你这填空题做的不错的话;到这已经跳到支付宝付款页面了;
四:同步接收通知
/Application/Api/Controller/AlipayController.class.php

     * return_url接收页面
     */
    public function alipay_return(){
        // 引入支付宝
        vendor('Alipay.AlipayNotify','','.class.php');
        $config=$config=C('ALIPAY_CONFIG');
        $notify=new \AlipayNotify($config);
        // 验证支付数据
        $status=$notify->verifyReturn();
        if($status){
            // 下面写验证通过的逻辑 比如说更改订单状态等等 $_GET['out_trade_no'] 为订单号;
            $this->success('支付成功',U('User/Order/index'));
        }else{
            $this->success('支付失败',U('User/Order/index'));
        }
    }

经过第三步支付成功后;支付宝是会带着一堆get参数跳向配置项中的return_url给的url;
然后在这里写接收通知的逻辑;
五:异步接收通知
/Application/Api/Controller/AlipayController.class.php

    /**
     * notify_url接收页面
     */
    public function alipay_notify(){
        // 引入支付宝
        vendor('Alipay.AlipayNotify','','.class.php');
        $config=$config=C('ALIPAY_CONFIG');
        $alipayNotify = new \AlipayNotify($config);
        // 验证支付数据
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result) {
            echo "success";
            // 下面写验证通过的逻辑 比如说更改订单状态等等 $_POST['out_trade_no'] 为订单号;

        }else {
            echo "fail";
        }
    }

正常流程中;第四步就已经结束了;
但是呢;很多时候因为各种原因;比如说用户支付成功后还没等支付宝跳转就关掉了窗口;
等等原因;在支付成功后并没有成功跳转回return_url指定的url
这时候就是notify_url这个发挥作用的时候了;
支付宝会按照一定的频率往我们的服务器发送异步post的支付结果通知;
我们把处理支付成功后的业务逻辑在这也放一份就可以了;
//*****************关于不知道怎么查看异步发过来的数据的补充*****************
2016.10.28:
好多童鞋在问支付后;不知道怎么查看接收到的支付状态通知;
这里做个补充;首先;我们的服务器必须是外网可以正常访问到的;
必须注意不能有 登录或者权限之类的拦截;
另外补充一个简单的查看收到的内容的方法用于测试;
/Application/Api/Controller/AlipayController.class.php

    /**
     * notify_url接收页面
     */
    public function alipay_notify(){
        // 下面的file_put_contents是用来简单查看异步发过来的数据 测试完可以删除;
        file_put_contents('./notify.text', json_encode($_POST));
        // 引入支付宝
        vendor('Alipay.AlipayNotify','','.class.php');
        $config=$config=C('ALIPAY_CONFIG');
        $alipayNotify = new \AlipayNotify($config);
        // 验证支付数据
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result) {
            echo "success";
            // 下面写验证通过的逻辑 比如说更改订单状态等等 $_POST['out_trade_no'] 为订单号;

        }else {
            echo "fail";
        }
    }

//*****************关于可能出现ILLEGAL_SIGN错误的解放方案*****************
示例项目中的 function.php 中顶部是有设置编码的:

header("Content-type:text/html;charset=utf-8");

如果整合到自己的项目中;记得添加上这句;

php实现支付宝在线支付接口开发详解

这篇文章主要为大家详细介绍了php支付宝在线支付接口开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下1.什么是第三方支付  所谓第三方支付,就是一些和各大银行签约、并具备一定实...

PHP支付接口支付完之后页面跳转有关问题

PHP支付宝接口,支付完之后页面跳转问题PHP支付宝接口,支付完之后页面停留在支付宝网站的支付成功界面,怎样让它跳转到指定页面?支付失败或者没支付让他跳转到另一个页面?怎样获取支付信息?

PHP支付接口支付完之后页面跳转有关问题

PHP支付宝接口,支付完之后页面跳转问题PHP支付宝接口,支付完之后页面停留在支付宝网站的支付成功界面,怎样让它跳转到指定页面?支付失败或者没支付让他跳转到另一个页面?怎样获取支付信息?

PHP实现个人支付支付开发(一)

...程中,特别是商城类网站,都会要求网站必须能实现在线支付的功能。此时就需要通过第三方的支付平台来实现完整的交易流程。常见的第三方支付平台就比如支付宝,那么网站实现支付宝在线支付功能就需要进行支付宝接口开...

PHP如何实现支付支付的流程介绍

本篇文章给大家分享的内容是PHP如何实现支付宝支付的流程介绍,有着一定的参考价值,有需要的朋友可以参考一下1、首先我们先谈谈第三方支付所谓第三方支付就是和一些各大...

关于支付支付接口,如何设计自动查询订单状态。

问题:受网络环境的影响,同步和异步支付结果的通知,可能会接收不到。 哪么应该怎么设计自动查询订单状态比较合理呢? 我的疑问是: 1.如果用计划任务来做,如何准确判断未付款...

如何申请和配置微信支付接口

如何让自己的网站能够在电脑端和移动端能够使用微信支付呢?你只需要申请微信支付接口并搭建一个支持微信支付的网站(同时支持电脑端、手机、微信公众号),我们以米拓企业建站系统及米拓商城模块为例。安装...

支付宝手机网站支付接口 FOR ECShop_PHP教程

支付宝WAP网站版本的支付接口网上整合的比较少,看到很多网站在卖,顿觉无语。 主要是得自己查看支付宝官方提供的SDK中的开发文档。 支付宝sdk下载地址:http://club.alipay.com/read-htm-tid-9976972.html 1. 要使用...

PHP支付接口支付完之后页面跳转问题

PHP支付宝接口,支付完之后页面停留在支付宝网站的支付成功界面,怎样让它跳转到指定页面?支付失败或者没支付让他跳转到另一个页面?怎样获取支付信息? 回复讨论(解决方案) PHP支付宝接口,支付完...

关于支付支付接口,我这边php该提供给ios什么?要怎么写?

...需要给ios或者android返回一个签名,他们通过验证签名来支付。//支付宝签名 $list = array( 'partner' =>$alipay_config['partner'],