From 000154b8750aa7d10526197dd1e2931fda839a42 Mon Sep 17 00:00:00 2001
From: dedemao Date: Mon, 18 Jun 2018 13:58:13 +0800
Subject: [PATCH] =?UTF-8?q?jsapi=E6=94=AF=E4=BB=98=EF=BC=88APP=E6=94=AF?=
=?UTF-8?q?=E4=BB=98=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
jsapi.php | 242 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 242 insertions(+)
create mode 100644 jsapi.php
diff --git a/jsapi.php b/jsapi.php
new file mode 100644
index 0000000..395c09e
--- /dev/null
+++ b/jsapi.php
@@ -0,0 +1,242 @@
+密钥管理->开放平台密钥,填写添加了电脑网站支付的应用的APPID
+$notifyUrl = 'http://www.xxx.com/alipay/notify.php'; //付款成功后的异步回调地址
+$outTradeNo = uniqid(); //你自己的商品订单号,不能重复
+$payAmount = 0.01; //付款金额,单位:元
+$orderName = '支付测试'; //订单标题
+$signType = 'RSA2';//签名算法类型,支持RSA2和RSA,推荐使用RSA2
+//商户私钥
+$rsaPrivateKey='';
+/*** 配置结束 ***/
+$aliPay = new AlipayService();
+$aliPay->setAppid($appid);
+$aliPay->setNotifyUrl($notifyUrl);
+$aliPay->setRsaPrivateKey($rsaPrivateKey);
+$aliPay->setTotalFee($payAmount);
+$aliPay->setOutTradeNo($outTradeNo);
+$aliPay->setOrderName($orderName);
+$orderStr = $aliPay->getOrderStr();
+?>
+
+
+
+
+
+ 支付宝jsapi支付
+
+
+
+
+
+
+
+
请使用支付宝扫码打开该网页:
+
+
+
点击以下按钮唤起支付宝支付
+点击调起支付宝支付
+
+
+
+
+
+
+
+
+
+
+charset = 'utf8';
+ }
+ public function setAppid($appid)
+ {
+ $this->appId = $appid;
+ }
+ public function setNotifyUrl($notifyUrl)
+ {
+ $this->notifyUrl = $notifyUrl;
+ }
+ public function setRsaPrivateKey($saPrivateKey)
+ {
+ $this->rsaPrivateKey = $saPrivateKey;
+ }
+ public function setTotalFee($payAmount)
+ {
+ $this->totalFee = $payAmount;
+ }
+ public function setOutTradeNo($outTradeNo)
+ {
+ $this->outTradeNo = $outTradeNo;
+ }
+ public function setOrderName($orderName)
+ {
+ $this->orderName = $orderName;
+ }
+ /**
+ * 获取orderStr
+ * @return array
+ */
+ public function getOrderStr()
+ {
+ //请求参数
+ $requestConfigs = array(
+ 'out_trade_no'=>$this->outTradeNo,
+ 'total_amount'=>$this->totalFee, //单位 元
+ 'subject'=>$this->orderName, //订单标题
+ 'product_code'=>'QUICK_MSECURITY_PAY', //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
+ 'timeout_express'=>'2h', //该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
+// 'store_id'=>'', //商户门店编号。该参数用于请求参数中以区分各门店,非必传项。
+// 'extend_params'=>array(
+// 'sys_service_provider_id'=>'' //系统商编号,该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID
+// )
+ );
+ $commonConfigs = array(
+ //公共参数
+ 'app_id' => $this->appId,
+ 'method' => 'alipay.trade.app.pay', //接口名称
+ 'format' => 'JSON',
+ 'charset'=>$this->charset,
+ 'sign_type'=>'RSA2',
+ 'timestamp'=>date('Y-m-d H:i:s'),
+ 'version'=>'1.0',
+ 'notify_url' => $this->notifyUrl,
+ 'biz_content'=>json_encode($requestConfigs),
+ );
+ $commonConfigs["sign"] = $this->generateSign($commonConfigs, $commonConfigs['sign_type']);
+ $result = $this->buildOrderStr($commonConfigs);
+ return $result;
+ }
+ public function generateSign($params, $signType = "RSA") {
+ return $this->sign($this->getSignContent($params), $signType);
+ }
+ protected function sign($data, $signType = "RSA") {
+ $priKey=$this->rsaPrivateKey;
+ $res = "-----BEGIN RSA PRIVATE KEY-----\n" .
+ wordwrap($priKey, 64, "\n", true) .
+ "\n-----END RSA PRIVATE KEY-----";
+ ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置');
+ if ("RSA2" == $signType) {
+ openssl_sign($data, $sign, $res, version_compare(PHP_VERSION,'5.4.0', ' $v) {
+ if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {
+ // 转换成目标字符集
+ $v = $this->characet($v, $this->charset);
+ if ($i == 0) {
+ $stringToBeSigned .= "$k" . "=" . "$v";
+ } else {
+ $stringToBeSigned .= "&" . "$k" . "=" . "$v";
+ }
+ $i++;
+ }
+ }
+ unset ($k, $v);
+ return $stringToBeSigned;
+ }
+ /**
+ * 转换字符集编码
+ * @param $data
+ * @param $targetCharset
+ * @return string
+ */
+ function characet($data, $targetCharset) {
+ if (!empty($data)) {
+ $fileType = $this->charset;
+ if (strcasecmp($fileType, $targetCharset) != 0) {
+ $data = mb_convert_encoding($data, $targetCharset, $fileType);
+ //$data = iconv($fileType, $targetCharset.'//IGNORE', $data);
+ }
+ }
+ return $data;
+ }
+
+ public function buildOrderStr($data)
+ {
+ return http_build_query($data);
+ }
+}
+// 是否支付宝客户端
+function isInAlipayClient() {
+ if( strpos($_SERVER['HTTP_USER_AGENT'], 'AlipayClient') !== false ) {
+ return true;
+ }
+ return false;
+}
+function getCurrentUrl()
+{
+ $scheme = $_SERVER['HTTPS']=='on' ? 'https://' : 'http://';
+ if($_SERVER['QUERY_STRING']) $_SERVER['QUERY_STRING'] = '?'.$_SERVER['QUERY_STRING'];
+ $baseUrl = urlencode($scheme.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);
+ return $baseUrl;
+}
\ No newline at end of file