自己学习使的 仅供参考
一、打开蚂蚁金服开放平台 找到研发服务->沙箱应用
设置沙箱应用保证可以使用
二、找到sdkdemo下载放到本地环境并改名为alipay配置里面的config 注释有详细的讲解仔细看
三、(这里是我的习惯)放到laravel的app下
四、去config下面新建一个alipay.php将本地修改好的config放到中间
五、复制alipay/pagepay里面的pagepay.php代码到自己的支付方法里面需要修改(发生错误的顺序没分先后)
1、出现一个AopCline的一个each的错误(这个一般是laravel5.以上才会发生)
修改为
foreach ($para_temp as $key=>$val) {if (false === $this->checkEmpty($val)) {//$val = $this->characet($val, $this->postCharset);$val = str_replace("'","'",$val);//$val = str_replace("\"",""",$val);$sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";}}
2.出现一个encrypt或者decrypt冲突的错误(因为laravel自带encrypt和decrypt方法)修改alipay/aop/AopEncrypt.php的方法名即可 如:
*** 加密方法* @param string $str* @return string*/function alipay_encrypt($str,$screct_key){//AES, 128 模式加密数据 CBC$screct_key = base64_decode($screct_key);$str = trim($str);$str = addPKCS7Padding($str);$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),1);$encrypt_str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC);return base64_encode($encrypt_str);
}/*** 解密方法* @param string $str* @return string*/function alipay_decrypt($str,$screct_key){//AES, 128 模式加密数据 CBC$str = base64_decode($str);$screct_key = base64_decode($screct_key);$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),1);$encrypt_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_CBC);$encrypt_str = trim($encrypt_str);$encrypt_str = stripPKSC7Padding($encrypt_str);return $encrypt_str;}
3.会出现一个AlipayTradePagePayContentBuilder()错误 找到这个位置前面加个\
到这里基本就结束了 附上自己测试代码
//支付方法public function pay($order_id){require_once app_path("Packages/alipay/pagepay/service/AlipayTradeService.php");require_once app_path("Packages/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php");$config = config("alipay");//商户订单号,商户网站订单系统中唯一订单号,必填$out_trade_no = date('YmdHis').rand(50,200).Str::random(10);//订单名称,必填$subject = trim("go团队测试");//付款金额,必填$total_amount = rand(10,100);//商品描述,可空$body = "";//构造参数$payRequestBuilder = new \AlipayTradePagePayContentBuilder();$payRequestBuilder->setBody($body);$payRequestBuilder->setSubject($subject);$payRequestBuilder->setTotalAmount($total_amount);$payRequestBuilder->setOutTradeNo($out_trade_no);$aop = new \AlipayTradeService($config);/*** pagePay 电脑网站支付请求* @param $builder 业务参数,使用buildmodel中的对象生成。* @param $return_url 同步跳转地址,公网可以访问* @param $notify_url 异步通知地址,公网可以访问* @return $response 支付宝返回的信息*/$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);//输出表单var_dump($response);}
4、同步跳转
//同步跳转public function success(){//引入配置文件$config = config('alipay');//引入ALipayTradeService文件require_once app_path("Packages/alipay/pagepay/service/AlipayTradeService.php");//接到支付宝同步跳转所返回的所有值 都将验签使用$arr = $_GET;//实例化AlipayTradeService 前面加个\ 传配置文件过去$alipaySevice = new \AlipayTradeService($config);//调用验签方法 这里特别说明一下 如果验签失败。请去AlipayTradeService文件中找到check方法做一下修改$ischeck = $alipaySevice->check($arr);//判断验签是否成功if($ischeck){//成功跳转到订单成功页面 用于提示用户return view("order.success");}else{//验签失败echo "fail";}}