App支付宝支付--PHP处理代码
/* *生成APP支付订单信息 * @param number uid 用户id * @param string token 用户token * @param number oid 订单id * @param string title 标题 * @param string body 商品描述 * @parma float money 金额 * @param number ordernum 订单编号 */ public function zfb_pay() { $data = input('post.'); $member = new Member(); //验证token是否有效 是否过期 /* $verify_tn = $member->verify_token($data['uid'],$data['token']); if(!$verify_tn){ return_msg("100","token已失效,请重新登陆!"); }*/ // $orderinfo = Db::table('shfw_order')->where('id',$data['oid'])->field('id,ordernum,money')->find(); Loader::import('/alipay/aop/AopClient',EXTEND_PATH); $aop = new \AopClient(); $aop->appId = config("alipay_app_id"); $aop->rsaPrivateKey = config('alipay_private_key'); $aop->alipayrsaPublicKey = config('alipay_public_key');//对应填写 $aop->signType = "RSA2"; //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay Loader::import('/alipay/aop/request/AlipayTradeAppPayRequest',EXTEND_PATH); $request = new \AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数 $bizcontent = json_encode(array( 'body' => $data['body'], //商品描述 'subject' => $data['title'], //支付的标题, 'out_trade_no' => $data['ordernum'], //支付宝订单号必须是唯一的,只能生成一次 'total_amount' => $data['money'], //金额 "timeout_express" => "30m", //订单支付有效时间 m分钟 h小时 'product_code' => 'QUICK_MSECURITY_PAY' )); $request->setNotifyUrl("http://test.111.com/notifyurl");//你在应用那里设置的异步回调地址 $request->setBizContent($bizcontent); //这里和普通的接口调用不同,使用的是sdkExecute $response = $aop->sdkExecute($request); //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 /* echo htmlspecialchars($response);*///就是orderString 可以直接给客户端请求,无需再做处理。 if($response){ return_msg('200','支付宝请求成功!',$response); }else{ return_msg('100','支付请求失败!',$response); } } /* * 支付宝支付回调 */ public function notifyurl() { Loader::import('/alipay/aop/AopClient',EXTEND_PATH); $aop = new \AopClient(); $aop->alipayrsaPublicKey =config('alipay_public_key');//对应填写 $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']; //交易状态trade_status $total_amount = $_POST['total_amount']; //订单的实际金额 $order = Db::table("shfw_order")->where('ordernum', $out_trade_no)->find(); if ($order) { //只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。 if ($trade_status != 'TRADE_FINISHED' && $trade_status != 'TRADE_SUCCESS') { return 'fail'; } //2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额); if ($total_amount != $order['money']) { return 'fail'; } //校验成功后在response中返回success,校验失败返回failure $update = array( 'status' => '2', //修改支付状态 'zhi_time' => time(), //添加支付时间 'pay_type' => 1); //添加支付类型 $result = Db::table("shfw_order")->where('ordernum', $out_trade_no)->update($update); $res = Db::table("shfw_order")->where('ordernum', $out_trade_no)->field('id,mid,ordernum,nickname,addtime,pay_type')->find(); // $member = Db::table('shfw_member')->where('id',$res['mid'])->find(); //添加充值记录 $res['payorder'] = $trade_no; $res['money'] = $total_amount; $addpay = $this->addpay($res); if ($result && $addpay) { return "success"; } else { return 'fail'; } } else { exit('fail'); } } }