對於每個剛開始工作的新手來說,無論支付寶支付還是微信支付都是跑不掉的一個小門檻。
在加上本人比較技術比較渣(比較懶導致的),不太喜歡引用那么大的SDK,於是就簡單集成了一下支付寶的支付。
但也只是只有支付而已哦,其他的一些功能還是自己用自己在集成吧,嘻嘻(#^.^#)還是懶。
廢話不多說了,直接上代碼:
/** * 支付寶支付 */ class Alipay { private $config =[ "app_id" => "************", //支付寶APPid "rsaPrivateKey" => "************", //支付寶私鑰 "rsaPublicKey" => "************", //支付寶公鑰 "charset" => "utf-8", "sign_type" => "RSA2", "version" => "1.0", ]; private $submitUrl = "https://openapi.alipay.com/gateway.do" ;//提交地址 public $calltype = "app";//pc電腦端 app 手機和app端公用 public $submit_auto=true; public function index($data) { $calltype=$this->calltype; return $this->$calltype($data); } public function app($data) { $return_url=$data['return_url']; $notify_url=$data['notify_url']; $subject=$data['subject']; $order_sn=$data['order_sn']; $total=$data['total']; $biz_content=[ 'body'=>'', 'subject'=>$subject, 'out_trade_no'=>$order_sn, 'timeout_express'=>'30m', 'total_amount'=>$total, 'product_code'=>'QUICK_MSECURITY_PAY', ]; $postdata=[ 'app_id'=>$this->config['app_id'], 'method'=>'alipay.trade.app.pay', 'format'=>'json', 'charset'=>$this->config['charset'], 'sign_type'=>$this->config['sign_type'], 'sign'=>'', 'timestamp'=>date('Y-m-d H:i:s'), 'version'=>'1.0', 'notify_url'=>$notify_url, 'biz_content'=>json_encode($biz_content), ]; $signdata=$this->alisign($postdata); $str=$this->keyandvalStr($signdata,1); //返回鏈接不能帶官方https鏈接 return $str; } public function pc($data) { $return_url=$data['return_url']; $notify_url=$data['notify_url']; $biz_content=[ "total_amount"=>$data['total'], "product_code"=>"FAST_INSTANT_TRADE_PAY", "subject"=>$data['subject'], "out_trade_no"=>$data['order_sn'], "goods_type"=>1,//商品類型 0虛擬商品 1實物商品 ]; $post=[ 'app_id'=>$this->config['app_id'], 'method'=>'alipay.trade.page.pay', 'format'=>'JSON', 'return_url'=>$return_url, 'charset'=>$this->config['charset'], 'sign_type'=>$this->config['sign_type'], // 'sign'=>$sign, 'timestamp'=>date('Y-m-d H:i:s'), 'version'=>$this->config['version'], 'notify_url'=>$notify_url, 'biz_content'=>json_encode($biz_content), ]; $signdata=$this->alisign($post); $html=$this->formsubmithtml($this->submitUrl,$signdata); return $html; } public function mobile($data) { $return_url=$data['return_url']; $notify_url=$data['notify_url']; $biz_content=[ "total_amount"=>$data['total'], "product_code"=>"QUICK_WAP_WAY", "subject"=>$data['subject'], "out_trade_no"=>$data['order_sn'], "goods_type"=>1,//商品類型 0虛擬商品 1實物商品 ]; $post=[ 'app_id'=>$this->config['app_id'], 'method'=>'alipay.trade.wap.pay', 'format'=>'JSON', 'return_url'=>$return_url, 'charset'=>$this->config['charset'], 'sign_type'=>$this->config['sign_type'], // 'sign'=>$sign, 'timestamp'=>date('Y-m-d H:i:s'), 'version'=>$this->config['version'], 'notify_url'=>$notify_url, 'biz_content'=>json_encode($biz_content), ]; $signdata=$this->alisign($post); $str=$this->keyandvalStr($signdata,1); $url="https://openapi.alipay.com/gateway.do?".$str; return $url; } public function alisign($data) { $rsaPrivateKey=$this->config['rsaPrivateKey']; $buff = ""; ksort($data); $buff=$this->keyandvalStr($data); $str = chunk_split($rsaPrivateKey, 64, "\n"); $res = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n"; $sign=$this->ras2Sign($buff,$res); $data['sign']=$sign; return $data; } function keyandvalStr($data,$flg=0) { $buff=""; foreach ($data as $k => $v) { if($flg!=0 && $v != "" && !is_array($v)) { $v=urlencode($v); $buff .= $k . "=" . $v . "&"; }else{ if($k != "sign" && $v != "" && !is_array($v)){ $buff .= $k . "=" . $v . "&"; } } } $buff = trim($buff, "&"); return $buff; } function ras2Sign($buff,$res) { $sign=''; openssl_sign($buff, $sign, $res, OPENSSL_ALGO_SHA256); $sign = base64_encode($sign); return $sign; } function formsubmithtml($action,$data) { $sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$action."' method='POST'>"; foreach ($data as $key => $value) { $val = str_replace("'","'",$value); $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>"; } $sHtml = $sHtml."<input type='submit' class='paysubmit' value='ok' ></form>"; if($this->submit_auto==true) { $sHtml = $sHtml."<script>document.forms['alipaysubmit'].submit();</script>"; } return $sHtml; } }
調用方法:
use pay\Alipay; $callD=[ 'return_url' => '支付完成跳轉路徑', 'notify_url' => '回調路徑', 'total' => '支付總額', 'subject' => '支付說明', 'order_sn' => '生成訂單號', ]; $url=$this->Alipay($callD); public function Alipay($data,$flg=true) { $pay = new Alipay(); $pay->calltype='app'; $pay->submit_auto=$flg; $pay=$pay->index($data); return $pay; }
以上即是本次分享的內容。
感謝您的觀看。
2019年05月10日