一、
创建订单并调起支付页面
public function alipayCreate()
{
if (is_numeric($_POST['total'])) {
$orderAmount = $_POST['total'];
}
$data = $_POST;
$config=array (
//应用ID,您的APPID。
'app_id' => "2018111962272505",
//商户私钥
'merchant_private_key' => "私钥",
//异步通知地址
'notify_url' => "127.0.0.5/Alipay/alinotify",//http://house.mydtsk.cn/Alipay/alinotify
//同步跳转
'return_url' => "127.0.0.5/Alipay/returnUrl",//http://house.mydtsk.cn/Alipay/returnUrl
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type'=>"RSA2",
//支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "支付宝公钥",
);
//导入支付宝类
Vendor('Aplipay.pagepay.service.AlipayTradeService');
Vendor('Aplipay.pagepay.buildermodel.AlipayTradePagePayContentBuilder');
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = (int)(microtime(true)*1000);
//订单名称,必填
$subject = '好房充值';
//付款金额,必填
// $total_amount = '0.01';
$total_amount = $data['info']['total'];
//商品描述,可空
$body = '';
$data['uid'] = $data['info']['uid'];
$data['type'] = 1;
$data['money'] = $total_amount;
$data['addtime'] = time();
$data['title'] = $subject;
$data['isorder'] = $out_trade_no;
$data['khdip'] = $_SERVER['HTTP_CLIENT_IP'];
$res = M('usermoney')->add($data);
//构造参数
$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);
}
二、
异步回调
public function alinotify(){
//导入支付宝类
$config=array(
'gatewayUrl' => 'https://openapi.alipay.com/gateway.do',//支付宝网关(固定)'
'appId' => '2018111962272505',
'rsaPrivateKey' => 'MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDURJ1gHEWZ9i7A/WNp3Y4JOugVY7FNbXHKw66/oaDSXkf8w+KCqSG7lWI9Pv5Pe/0AezwsOccJ61cLdLm3lsAMl+enLziYbXZLHTpAQ/fk8e9VpoqQHiCJ6762fvif3uutTQMsn146P1mKw4IEp6yVYUeDvzBUIu3WQM5RF9NZkDi+VAGH+RYDdcs1+vh0gShIe9ag9DamfLwXDuKdCiZlJi4Cy4UhI7lV1x6Zzbg8bsTY+fVAKQsrh7lrKz1D731Ixq59c0nky9bvycyxnMZFurV2Fba+qNufhmIUYAbl2plNIAZMdmnuxLX26ro/88Yoo8MC0lXeMBnsQPWsAlyVAgMBAAECggEBALjiEpj1xwG01UAu83nwCZisgByxOmsQGn7bNcefha31hIn6K75WhhUWpfxmc6bTfaf/roduw5g2LRjDUEdBvIC7hn+tt4O8Q75k9KmpCa+VsjpN1n50Xy8B8JiPuwm0Zl4Jp+wj2zSsnNcqNoLLcJyjoGB2FCgUTEfDJnCnaeSlDOAplRv+m6wVUYyiQGgwDUziWFlGDD6tPwT6Msa659yQK9dffVQR5dWsyftwr1A4/bzS+jTbSSDm3l2k5tO1HK/I+LkDy4zE6VpmZDTGoZ4kPA2W8xK7+xI+2dNw3VCxFJRNE2YRouVIeLvSzMT5b7KHSq5qJESe0OZX7qjjeTkCgYEA9FNxuu97K9WJrZeNHYS9zlogeGkUkLJW7I50rFqyHHj6LStb9JvsmFhbetW+kXqYmPbY7pR0JbEwBUB4b2mFM9mgJsiBPRBeoh3+ABI18pkchg9CENyp44uN9+J9ARs/KQbTB6g/cBSIqv6jO6Lehmk708QfctIKbXYj5MX8qFMCgYEA3mkLBxfXw6btFgfk3heF5zccTC6kZcX3O6/9v4iz1uf3C5SEWAXsRPgNuCleBrkLiln6GkCDhy4ejZYhTERvgV+N0jnWCSG997aJ7JgIrj/2Hy0xYHgGY0Ndp2JD9k/dtXo8a5k0V/T3dinkV62DqUQB5oTT+PcyyhCOePfzqncCgYEAiX6gBRQaG7vq497ikhcOfZ7ooPp5kUhbdHpinE/Z5f4Kw/qfoBNTXRR0PrckrFfyojpgMDso9cE2Be6XGBOo21oAL3Msj8Gzj8YTF9UnuOODUsopYrXbgWsatMInmMTNkXf+sFN1h8x2cMwl7jykv71e5rh6/jHHnnwajPcCTXMCgYEAzLSiEcVAMjRRwxVA8al09Xsj8Hp9la6//4/cXY3U+NhH6cCojtvkuxYUioyInmdy18Q5DjCS3rj0Jh0oSKo0dz8bqYLSHVWRI44/JCRK2RbF0awm5kOSnYpDiOxI4UxhI8d+FQrNwqcVnQyxvoFVzVVq6mEXOO9NL+5NM8oD28ECgYBP8sDj7BsL+XMY2cOdCU2aEcFLYP6DeTxhs9e1eDJF66SUU6hKgO72pEnzzi/44XHhhpKcZPcNBCvggUCjgbSNJR4nOf/QhcSCDFGppyAYiKMD15BzucrCzfVMsUq5csIIhzfmkH7u72F+Oz3yqL4pp9uUhVOc4hptE+cGXgq+jw==',
'alipayrsaPublicKey' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsmKikSjeP5qMpIV4yWniPR+JxxkuHDXt+kaloVy90lVuJUCPnY1gVmJUBvyA1v0GKCvQifUf7MBPTL/68I15ARyD0D48fIbI1S0ekgjz4KYQdHPTnHtHkpxVbzHVJHg1PwTvnKpzzTSBaGibNj9tN3xBdWPO7LM5VnLyasmlJYHuNxP5EvKHc5x4qoXEsskBqd8l5DzvuZN4+AcScMMKVQixPTgYDXpmEseRekGfzbE297/e4Y/ciwFQVlnwoKGwYKFhcyg+xc9dIwym0aUtA4b7ieExe9ZPLabTTMfSLtbhEnBKuhLj3cU6HlB6168VGQjlJf3OdwIMOkOcYbpjtQIDAQAB',
'notifyUrl' => 'http://house.mydtsk.cn', // 支付成功通知地址
);
Vendor('Aplipay.aop.AopClient');
$aop = new \AopClient;
$aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];
$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'];
//订单的实际金额
$total_amount = $_POST['total_amount'];
$appid = $_POST['app_id'];
//验证app_id是否为商户本身
if($appid != $config['appId']){
exit('fail');
}
//判断交易通知状态是否为TRADE_SUCCESS或TRADE_FINISH
if($trade_status !='TRADE_SUCCESS'){
exit('fail');
}
//验证订单的准确性
if(!empty($out_trade_no)){
$where['isorder'] = $out_trade_no;
$res = M('usermoney')->where($where)->find();
if(!$res){
exit('fail');
}
//判断total_amount是否确实为该订单的实际金额
if($total_amount != $res['money']){
exit('fail');
}
}
//全部验证成功后修改订单状态doAliPay方法用于进行修改订单状态的逻辑,可以放手发挥了
$data['ispass'] = 1;
$where1['isorder'] = $out_trade_no;
$res1 = M('usermoney')->where($where1)->save($data);
$user = M('usermoney')->where($where1)->find();
$where2['id'] = $user['uid'];
$user1 = M('user')->where($where2)->find();
$data1['money'] = $user1['money']+$total_amount;
$re = M('user')->where($where2)->save($data1);
if($res1 && $re){
echo 'success';
} else {
echo 'fail';
}
} else {
echo 'fail';
}
}
三、
同步回调
public function returnUrl()
{
$this->success('支付成功','/Member/chongzhi');
}