load->library('alipay/AopSdk'); // real URL // $this->config->load('alipay'); // test URL $this->config->load('dev_alipay'); $this->load->model('AlipayTradePagePayContentBuilder'); $this->load->model('AlipayTradeQueryContentBuilder'); $this->gateway_url = $this->config->item('gatewayUrl'); $this->appid = $this->config->item('app_id'); $this->seller_id = $this->config->item('seller_id'); $this->private_key = $this->config->item('merchant_private_key'); $this->alipay_public_key = $this->config->item('alipay_public_key'); $this->charset = $this->config->item('charset'); $this->signtype = $this->config->item('sign_type'); if(empty($this->appid)||trim($this->appid)==""){ throw new Exception("appid should not be NULL!"); } if(empty($this->private_key)||trim($this->private_key)==""){ throw new Exception("private_key should not be NULL!"); } if(empty($this->alipay_public_key)||trim($this->alipay_public_key)==""){ throw new Exception("alipay_public_key should not be NULL!"); } if(empty($this->charset)||trim($this->charset)==""){ throw new Exception("charset should not be NULL!"); } if(empty($this->gateway_url)||trim($this->gateway_url)==""){ throw new Exception("gateway_url should not be NULL!"); } } // cht public function pay_fun() { //商户订单号,商户网站订单系统中唯一订单号,必填 $out_trade_no = trim($this->input->get_post('out_trade_no')); //订单名称,必填 $subject = trim($this->input->get_post('subject')); //付款金额,必填 $total_amount = trim($this->input->get_post('total_amount')); //商品描述,可空 $body = trim($this->input->get_post('body')); $this->AlipayTradePagePayContentBuilder->setBody($body); $this->AlipayTradePagePayContentBuilder->setSubject($subject); $this->AlipayTradePagePayContentBuilder->setTotalAmount($total_amount); $this->AlipayTradePagePayContentBuilder->setOutTradeNo($out_trade_no); $url = $this->pagePay( $this->AlipayTradePagePayContentBuilder, $this->config->item('return_url'), $this->config->item('notify_url')); return; } /** * alipay.trade.page.pay * @param $builder 业务参数,使用buildmodel中的对象生成。 * @param $return_url 同步跳转地址,公网可以访问 * @param $notify_url 异步通知地址,公网可以访问 * @return $response 支付宝返回的信息 */ function pagePay($builder,$return_url,$notify_url) { $biz_content=$builder->getBizContent(); //打印业务参数 cht log_message('error',"\r\n"." Begin \r\n".$biz_content); $request = new AlipayTradePagePayRequest(); $request->setNotifyUrl($notify_url); $request->setReturnUrl($return_url); $request->setBizContent ( $biz_content ); // 首先调用支付api $response = $this->aopclientRequestExecute ($request,true); return $response; } /** * sdkClient * @param $request 接口请求参数对象。 * @param $ispage 是否是页面接口,电脑网站支付是页面表单接口。 * @return $response 支付宝返回的信息 */ function aopclientRequestExecute($request,$ispage=false) { $aop = new AopClient (); $aop->gatewayUrl = $this->gateway_url; $aop->appId = $this->appid; $aop->rsaPrivateKey = $this->private_key; $aop->alipayrsaPublicKey = $this->alipay_public_key; $aop->apiVersion ="1.0"; $aop->postCharset = $this->charset; $aop->format= $this->format; $aop->signType=$this->signtype; // 开启页面信息输出 $aop->debugInfo=true; $result = null; if($ispage) { $result = $aop->pageExecute($request,"post"); echo $result; } else { $result = $aop->Execute($request); } //打开后,将报文写入log文件 cht log_message('error',"\r\n\r\nResponse: \r\n".var_export($result,true)); return $result; } /** * alipay.trade.query (统一收单线下交易查询) * @param $builder 业务参数,使用buildmodel中的对象生成。 * @return $response 支付宝返回的信息 */ function Query($builder){ $biz_content=$builder->getBizContent(); //打印业务参数 $request = new AlipayTradeQueryRequest(); $request->setBizContent ( $biz_content ); $response = $this->aopclientRequestExecute ($request); $response = $response->alipay_trade_query_response; return $response; } /** * 验签方法 * @param $arr 验签支付宝返回的信息,使用支付宝公钥。 * @return boolean */ function check($arr){ $aop = new AopClient(); $aop->alipayrsaPublicKey = $this->alipay_public_key; $result = $aop->rsaCheckV1($arr, $this->alipay_public_key, $this->signtype); if ($result === false) { return $result; } // cht // 1.app_id // 2.seller_id // 3.查询数据库,验证订单信息,订单号 // 4.订单金额 $verify_ret = true; if ($arr['app_id'] !== $this->appid) { $verify_ret = false; } if ($arr['seller_id'] !== $this->seller_id) { $verify_ret = false; } log_message('error',"\r\n\r\n Check result: ".$result); return $verify_ret; } // cht function return_url() { $arr = $this->input->get(); $result = $this->check($arr); if ($result) { $this->load->view("iPayLinks_rep",array("code"=>0,"msg"=>"")); // echo "付款成功!支付宝交易号:".$arr["trade_no"]; } else { echo "付款失败!"; } return; } // cht function notify_url() { $arr = $this->input->post(); $result = $this->check($arr); log_message('error',"\r\n\r\n Notify:\r\n".var_export($arr,true)); if ($result) { /*! * Do NOT touch * 不要改这里,必须返回这5个字符 */ echo "success"; } else { echo "fail"; } return; } }