riverslei/payment 支付宝

 

 

登录支付宝设置后台:

把商户公钥填到“应用公钥”,生成支付宝公钥。

appid,商户私钥,支付宝公钥三个参数

 

 

 

调起支付:

//支付宝支付
            import('lib.Alipay', EXTEND_PATH , '.php');
            $jtpay_model = new \Alipay();
            $pay_info = $jtpay_model->pay_order( $order_sn , $pay_money   );
            if($pay_info){
                $this->success( __("Purchase success") ,[
                'url' => $pay_info,
                'type' => 3,
                ]);
            }

配置参数:payment组件国内几乎都是坑爹的缺参数的同一篇文章,坑死人。

<?php

use Payment\Common\PayException;
use Payment\Client\Charge;
use Payment\Config;

class Alipay {


    /**
     * 发起支付
     */
    public function pay_order( $orderNo , $money  ) {

        $aliConfig = [
            'use_sandbox' => false, // 是否使用沙盒模式
            'app_id' => '',
            'sign_type' => 'RSA2', // RSA  RSA2
            // !!!注意:如果是文件方式,文件中只保留字符串,不要留下 -----BEGIN PUBLIC KEY----- 这种标记
            // 可以填写文件路径,或者密钥字符串  当前字符串是 rsa2 的支付宝公钥(开放平台获取)
            'ali_public_key' => '',
            // 可以填写文件路径,或者密钥字符串  我的沙箱模式,rsa与rsa2的私钥相同,为了方便测试
            'rsa_private_key' => '',
            'limit_pay' => [
            //'balance',// 余额
            //'moneyFund',// 余额宝
            //'debitCardExpress',// 	借记卡快捷
            //'creditCard',//信用卡
            //'creditCardExpress',// 信用卡快捷
            //'creditCardCartoon',//信用卡卡通
            //'credit_group',// 信用支付类型(包含信用卡卡通、信用卡快捷、花呗、花呗分期)
            ], // 用户不可用指定渠道支付当有多个渠道时用“,”分隔
            // 与业务相关参数
            'notify_url' => 'https://n/Notify_Alipay/notify',
            'return_url' => 'http://n/statics/ali.php',
            'return_raw' => true, // 在处理回调时,是否直接返回原始数据,默认为 true
        ];


        $payData = [
            'body' => '翡翠',    //对一笔交易的具体描述信息
            'subject' => '翡翠',    //商品标题
            'order_no' => $orderNo,
            'timeout_express' => time() + 600, // 表示必须 600s 内付款
            'amount' => $money, // 单位为元 ,最小为0.01
//            'return_param' => 'tata', // 一定不要传入汉字,只能是 字母 数字组合
            // 'client_ip' => isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1',// 客户地址
            'goods_type' => '0', // 0—虚拟类商品,1—实物类商品
            'store_id' => '',
            'quit_url' => 'https://fcn/#/levelpackage', // 收银台的返回按钮(用户打断支付操作时返回的地址,4.0.3版本新增)
        ];
        try {
            $url = Charge::run(Config::ALI_CHANNEL_WAP, $aliConfig, $payData);
        } catch (PayException $e) {
            echo $e->errorMessage();
            exit;
        }
        return $url;
        header('Location:' . $url);
    }

    

}

 

回调:

必须用implements:

<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Db;
//use think\Config;
use Payment\Config;
use Payment\Client\Notify;
use Payment\Common\PayException;
use Payment\Notify\PayNotifyInterface;
use Payment\Client\Charge;


/**
 * 支付宝支付回调
 */
class NotifyAli implements PayNotifyInterface{
    
    
     public function notifyProcess(array $data)
    {
        
        // 执行业务逻辑,成功后返回true
        $model = new NotifyAlipay();
        
        $res = $model->package_notify($data);
        
        if($res){
            return true;
        }
        
    }

}

class NotifyAlipay extends Api{
    
    protected $noNeedLogin = '*';
    protected $noNeedRight = '*';
    
    public function notify() {
        
//        file_put_contents("ali_notify1.txt",json_encode($_REQUEST));
        $callback = new NotifyAli();

        $type = 'ali_charge';// ali_charge wx_charge  cmb_charge
        $aliConfig = [
            'use_sandbox' => false, // 是否使用沙盒模式
            'app_id' => '20975',
            'sign_type' => 'RSA2', // RSA  RSA2
            // !!!注意:如果是文件方式,文件中只保留字符串,不要留下 -----BEGIN PUBLIC KEY----- 这种标记
            // 可以填写文件路径,或者密钥字符串  当前字符串是 rsa2 的支付宝公钥(开放平台获取)
            'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIQAB',
            // 可以填写文件路径,或者密钥字符串  我的沙箱模式,rsa与rsa2的私钥相同,为了方便测试
            'rsa_private_key' => 'MIIEowIBAAKCAQEAtVIHx2pADLC3ItDQFxqeHQmvPjtDJwOkSTKcBNrGmS6okONqQE+RIawok5Wnsy1bNj9ETysL5yaQfHulnM+CkhYnZ/wLzihpmWL0SfMHd89rfVobZJsJmfAO',
            'limit_pay' => [
            ], // 用户不可用指定渠道支付当有多个渠道时用“,”分隔
            // 与业务相关参数
            'notify_url' => 'https://an/NotifyAlipay/notify',
            'return_url' => 'http://fcn/statics/ali.php',
            'return_raw' => true, // 在处理回调时,是否直接返回原始数据,默认为 true
        ];
        try {
            // 获取第三方的原始数据,未进行签名检查,根据自己需要决定是否需要该步骤
            //$retData = Notify::getNotifyData($type, $config);

            $ret = Notify::run($type, $aliConfig , $callback);// 处理回调,内部进行了签名检查
        } catch (PayException $e) {
            echo $e->errorMessage();
            exit;
        }

        return $ret;
        
    }
    
    /**
     *  支付回调:
     */
    public function package_notify($data) {
        
        
        if($data['out_trade_no'] ){

            //业务代码
            $w["a.order_sn"] = array("eq",$data['out_trade_no']);
            $order_info = Db::name('app_package_order a')
               ->field('a.*,b.info,b.dynamic_rate,b.block_days')
               ->join('app_package b', 'a.package_id = b.id', 'left')
               ->where($w)
               ->find();
            
            if($order_info['pay_status']==1){
                //已支付
                return false;die;
            }
            
            
            return true;
        }

    }
    
    
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值