zoukankan      html  css  js  c++  java
  • app支付,支付宝支付微信支付

    <?php
    /**
    * app支付类服务端签名,以及验签
    */
    namespace MobileController;

    use CommonControllerMobileframeController;
    class PaysController extends MobileframeController
    {
    public function _initialize()
    {
    parent::_initialize();
    }

    /**
    * 接受客户端参数,返回客服端签名后的数据
    * 生成APP支付订单信息示例
    */
    public function alipay(){
    vendor('alipay.alipayapp.AopSdk');
    $alipay_config = C('alipay_config'); //必须
    $aop = new AopClient();
    $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
    $aop->appId = $alipay_config['app_id'];
    $aop->rsaPrivateKey =$alipay_config['private_key'];
    $aop->format = 'json';
    $aop->postCharset = 'UTF-8';
    $aop->signType = "RSA2";
    $aop->alipayrsaPublicKey = $alipay_config['public_key'];
    /**************************请求参数**************************/
    //商户订单号,商户网站订单系统中唯一订单号,必填
    $out_trade_no = $_POST['WIDout_trade_no'];

    //订单名称,必填
    $subject = $_POST['WIDsubject'];

    //付款金额,必填
    $total_fee = $_POST['WIDtotal_fee']/100;

    //商品描述,可空
    $body = $_POST['WIDbody'];


    /************************************************************/
    $bizcontent = json_encode([
    'body' => $body,
    'subject' => $subject,
    'out_trade_no' => $out_trade_no,
    'total_amount' => $total_fee,
    'product_code' => 'QUICK_MSECURITY_PAY'
    ]);

    $request = new AlipayTradeAppPayRequest();
    $notify_url = 'https://test.com/mobile/pays/alipay_notify';
    $request->setNotifyUrl($notify_url);
    $request->setBizContent($bizcontent);
    //生成用于调用收银台SDK的字符串
    $response = $aop->sdkExecute($request);

    echo $response;

    }

    public function alipay_notify(){
    vendor('alipay.alipayapp.AopSdk');
    $alipay_config = C('alipay_config');
    $aop = new AopClient();
    $aop->alipayrsaPublicKey = $alipay_config['public_key'];
    // $ree = file_get_contents("php://input");
    // sp_log($ree.'回调信息');
    $flag = $aop->rsaCheckV1($_POST,NULL,"RSA2"); // 检验签名

    if($flag) {//验证成功
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //请在这里加上商户的业务逻辑程序代
    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
    //商户订单号
    $out_trade_no = $_POST['out_trade_no'];
    //支付宝交易号
    $trade_no = $_POST['trade_no'];
    //交易状态
    $trade_status = $_POST['trade_status'];
    // logResult($trade_status);
    if($_POST['trade_status'] == 'TRADE_FINISHED') {
    $res = $this->notice_order_status_change($out_trade_no);//更新订单函数
    //判断该笔订单是否在商户网站中已经做过处理
    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
    //如果有做过处理,不执行商户的业务程序

    //注意:
    //该种交易状态只在两种情况下出现
    //1、开通了普通即时到账,买家付款成功后。
    //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。

    //调试用,写文本函数记录程序运行情况是否正常
    //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
    }
    else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
    $res = $this->notice_order_status_change($out_trade_no);//更新订单函数


    //注意:
    //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。

    //调试用,写文本函数记录程序运行情况是否正常
    //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
    //判断该笔订单是否在商户网站中已经做过处理
    }

    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
    sp_log('success');
    if($res){
    echo "success";
    }else{
    echo "fail";
    } //请不要修改或删除
    // logResult("成功,商户订单号".$out_trade_no.",支付宝交易号:".$trade_no.",交易状态:".$trade_status);
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }
    else {
    //验证失败
    sp_log('fail');
    echo "fail";

    // logResult("失败");

    //调试用,写文本函数记录程序运行情况是否正常
    //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
    }
    }

    private function notice_order_status_change($out_trade_no,$type=1,$status=1){
    //判断该笔订单是否在商户网站中已经做过处理
    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
    //如果有做过处理,不执行商户的业务程序
    sp_log($out_trade_no);
    $orderstatus = M('order')->field('status')->where(array('orderid'=>$out_trade_no))->find();
    if($orderstatus==1){
    return true;
    }
    $res = M('order')
    ->where(array('orderid'=>$out_trade_no))
    ->save(array('utime'=>$this->ctime,'status'=>$status,'type'=>$type));
    if(!$res){
    return false;
    }
    $res = M('order')->field('id,oid,uid')->where(array('orderid'=>$out_trade_no))->find();
    $goods = M('goods')->field('dtime,num')->where(array('id'=>$res['oid']))->find();
    $dtime = date('Y-m-d H:i:s',time()+$goods['dtime']*24*60*60);
    $data = array( 'orderid'=>$res['id'],
    'oid'=>$res['oid'],
    'uid'=>$res['uid'],
    'num'=>$goods['num'],
    'ctime'=>$this->ctime,
    'utime'=>$this->ctime,
    'etime'=>$dtime,
    );
    $bbuy = M('buy')->where(array('orderid'=>$res['id']))->find();
    if(!$bbuy and $res and $goods){
    $res = M('buy')->add($data);
    }else{
    return false;
    }
    return true;
    }

    /**
    * 商户系统先调用该接口在微信支付服务后台生成预支付交易单
    */
    public function wxpay(){
    Vendor('WxpayAPI.example.native');
    $indata = new WxPayUnifiedOrder();
    $indata->SetBody($_POST["name"]);//购买套餐名
    $indata->SetOut_trade_no($_POST["orderid"]);//订单id
    $indata->SetTotal_fee($_POST["price"]);//订单价格
    $indata->SetNotify_url('https://test.com/user/order/weixin_return');//通知地址
    $indata->SetTrade_type("APP");//交易类型
    $order = WxPayApi::unifiedOrder($indata);
    $this->ajaxReturn($order);
    }

    //查询订单
    function weixin_query(){
    Vendor('WxpayAPI.example.orderquery');

    if(isset($_REQUEST["out_trade_no"]) && $_REQUEST["out_trade_no"] != ""){
    $out_trade_no = $_REQUEST["out_trade_no"];
    $input = new WxPayOrderQuery();
    $input->SetOut_trade_no($out_trade_no);
    $res = WxPayApi::orderQuery($input);
    $this->ajaxReturn($res);
    }
    }
    //返回参数
    public function wxpayparameter(){
    Vendor('WxpayAPI.example.native');
    $parameter['appid'] = WxPayConfig::APPID;
    $parameter['mchid'] = WxPayConfig::MCHID;
    $parameter['key'] = WxPayConfig::KEY;
    $parameter['appsecret'] = WxPayConfig::APPSECRET;
    $parameter['status'] = 1;
    $this->ajaxReturn($parameter);
    }
    }
  • 相关阅读:
    EL 自定义函数
    Linux 软件安装管理
    Linux 网络环境查看命令
    Linux 用户和用户组的命令
    Linux 用户和用户组进阶命令
    Linux 用户和用户组的基本命令
    将博客搬至CSDN
    U盘做系统启动盘(PE)时的文件格式选择 HDD ZIP FDD
    STM32 的几种输入输出模式
    define 中强制类型转换 && 浮点数后面带f
  • 原文地址:https://www.cnblogs.com/jackduan/p/7388276.html
Copyright © 2011-2022 走看看