支付宝支付接口集成
首先需要商家账号:
https://b.alipay.com/order/serviceIndex.htm
然后需要对所有功能进行签约:
https://app.alipay.com/market/productIndex.htm
比如手机网站支付,收营台支付,在这之前还需要开通即时支付功能。
最后在下载对应支付方式的代码:
这是先介绍手机网站支付:
这个功能,可以是用户在网页上登录支付宝然后进行支付(所以说手机或者pc都可以支付的)。手机网站支付流程介绍网址如下,
在这里下载支付demo
https://doc.open.alipay.com/doc2/detail?treeId=60&articleId=103564&docType=1
选择:手机网站支付接口(alipay.wap.create.direct.pay.by.user)
为了简洁快速可是选择demo里面的md5支付。
这是使用的thinkphp框架,下面是集成了alipay的代码:
// 移动网站支付 private function wappay($order){ // Vendor('Alipay.alipay#config'); // ALIPAY_CONFIG $alipay_config = C('ALIPAY_CONFIG'); Vendor('Alipay.lib.alipay_core#function'); Vendor('Alipay.lib.alipay_md5#function'); Vendor('Alipay.lib.alipay_submit#class'); /**************************请求参数**************************/ //商户订单号,商户网站订单系统中唯一订单号,必填 $out_trade_no = $order['id'].'-'.time(); $subject = $order['title']; //订单名称,必填 $total_fee = $order['price']; //付款金额,必填 $show_url = $order['url']; //收银台页面上,商品展示的超链接,必填 $body = $order['remark']; //商品描述,可空 $return_url = $order['jumpurl'] ? $order['jumpurl'] : $alipay_config['return_url']; /************************************************************/ //构造要请求的参数数组,无需改动 $parameter = array( "service" => $alipay_config['service'], "partner" => $alipay_config['partner'], "seller_id" => $alipay_config['seller_id'], "payment_type" => $alipay_config['payment_type'], "notify_url" => $alipay_config['notify_url'], "return_url" => $return_url, "_input_charset" => trim(strtolower($alipay_config['input_charset'])), "out_trade_no" => $out_trade_no, "subject" => $subject, "total_fee" => $total_fee, "show_url" => $show_url, "body" => $body, //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.2Z6TSk&treeId=60&articleId=103693&docType=1 //如"参数名" => "参数值" 注:上一个参数末尾需要“,”逗号。 ); //建立请求 $alipaySubmit = new \AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认"); return $html_text; } // 网站支付 收银台 private function webpay($order){ // Vendor('Alipay.alipay#config'); // ALIPAY_CONFIG $alipay_config = C('ALIPAY_CONFIG'); $alipay_config['service'] = 'create_direct_pay_by_user'; Vendor('Alipay.lib.alipay_core#function'); Vendor('Alipay.lib.alipay_md5#function'); Vendor('Alipay.lib.alipay_submit#class'); /**************************请求参数**************************/ //商户订单号,商户网站订单系统中唯一订单号,必填 $out_trade_no = $order['id'].'-'.time(); $subject = $order['title']; //订单名称,必填 $total_fee = $order['price']; //付款金额,必填 $show_url = $order['url']; //收银台页面上,商品展示的超链接,必填 $body = $order['remark']; //商品描述,可空 $alipay_config['return_url'] = $order['jumpurl'] ? $order['jumpurl'] : $alipay_config['return_url']; /************************************************************/ $parameter = array( "service" => $alipay_config['service'], "partner" => $alipay_config['partner'], "seller_id" => $alipay_config['seller_id'], "payment_type" => $alipay_config['payment_type'], "notify_url" => $alipay_config['notify_url'], "return_url" => $alipay_config['return_url'], "anti_phishing_key"=>"", "exter_invoke_ip"=>"", "out_trade_no" => $out_trade_no, "subject" => $subject, "total_fee" => $total_fee, "body" => $body, "_input_charset" => trim(strtolower($alipay_config['input_charset'])) //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1 //如"参数名"=>"参数值" ); //建立请求 $alipaySubmit = new \AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认"); return $html_text; } public function return_url(){ $alipay_config = C('ALIPAY_CONFIG'); Vendor('Alipay.lib.alipay_core#function'); Vendor('Alipay.lib.alipay_md5#function'); Vendor('Alipay.lib.alipay_notify#class'); $alipayNotify = new \AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyReturn(); $this->assign('verify_result', $verify_result ) ; $this->display('Uniorder:return_url'); exit; } // 异步通知 public function notify_url(){ $alipay_config = C('ALIPAY_CONFIG'); Vendor('Alipay.lib.alipay_core#function'); Vendor('Alipay.lib.alipay_md5#function'); Vendor('Alipay.lib.alipay_notify#class'); //计算得出通知验证结果 $alipayNotify = new \AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyNotify(); if($verify_result) {//验证成功 $out_trade_no = $_POST['out_trade_no']; //商户订单号 $trade_no = $_POST['trade_no']; //支付宝交易号 $trade_status = $_POST['trade_status']; //交易状态 if ($_POST['trade_status'] == 'TRADE_SUCCESS') { // 查询订单 $id = explode('-', $_POST['out_trade_no']); $id = (int)$id[0]; $one = M('pay_order')->field('state')->where(array('id'=>$id))->find(); if( !$one ) return; if( $one['state'] == 2 ){ echo "success";exit; } redisObj()->Hincrby('pay_urlcount',$one['urlmd5'],1); // 打赏+1 $wxorder = $re['info']; $data = array( 'id' => $id, 'state' => 2, 'callback' => http_build_query($_POST), 'trade_no' => $_POST['trade_no'], 'openid' => $_POST['buyer_id'], 'price_actual' => $_POST['total_fee'], 'etime' => time() ); M('pay_order')->save($data); } echo "success"; //请不要修改或删除 } else { //验证失败 echo "fail"; } }
这里的alipayconfig为:
'ALIPAY_CONFIG' => array( 'partner' => '88888888', //合作伙伴身份id 'seller_id' => '88888888', //同上合作伙伴身份id 'key' => '123123', // 合作伙伴MD5密钥 'notify_url' => "/pay/alipay/notify_url", 'return_url' => "/pay/alipay/return_url", 'sign_type' => strtoupper('MD5'), 'input_charset'=> strtolower('utf-8'), 'cacert' => getcwd().'\\cacert.pem', 'transport' => 'http', 'payment_type' => "1", 'service' => "alipay.wap.create.direct.pay.by.user", ),
使用商户id和秘钥为合作伙伴身份,查看地址:
https://openhome.alipay.com/platform/keyManage.htm?keyType=partner
以上代码提供了两个函数:手机网站支付和收营台支付。
错误点:
ALI10:系统繁忙,请稍候再试(ALI10)
系统繁忙,请稍候再试(ALI10),这是因为传递的参数 title 不能为空