首页
友人帐
留言板
关于
Search
1
IDE Eval Resetter:JetBrains 全家桶无限试用插件
553 阅读
2
影视资源采集站收录大全
489 阅读
3
linux安装或升级protoc
336 阅读
4
HEU KMS Activator v23.1.0 win10 office2019激活工具
236 阅读
5
Cloudflare国内自选IP节点整理收录
228 阅读
谈天说地
程序源码
技术教程
成品源码
登录
Search
标签搜索
PHP
linux
源码
go
windows
centos
原创
mysql
微信
激活
采集
宝塔
绿色版
API
解析
SDK
图片
破解
域名
html
云青
累计撰写
150
篇文章
累计收到
165
条评论
首页
栏目
谈天说地
程序源码
技术教程
成品源码
页面
友人帐
留言板
关于
搜索到
1
篇与
的结果
2019-11-04
分享自用支付宝支付类
分享自用的支付宝支付类目前只封装了 订单查询以及app支付更多的支付 后期会集成异步主要商户订单号查询 并确定金额是否与数据库中一致以及判断该商户订单号是否处理过(谨记)个人觉得验签并不重要 有订单查询以及数据库订单验证就行了过多的就不介绍了 源码有注释 <?php /** * @author anderyly * @email admin@aaayun.cc * @link https://blog.aaayun.cc/ * @copyright Copyright (c) 2019 */ class AliPay { // 应用ID public $appId; // 私钥 public $privateKey; // 公钥 public $publicKey; // 异步地址 public $notify_url; // 同步地址 public $return_url; //返回数据格式 public $format = "json"; //版本 public $version = "1.0"; // 编码 public $charset = "UTF-8"; //签名类型 public $signType = "RSA2"; // 配置 public $config; // 网关 public $gatewayUrl = "https://openapi.alipay.com/gateway.do"; public function __construct($appid, $privateKey, $publicKey, $notify_url, $return_url) { $this->appId = $appid; $this->privateKey = $privateKey; $this->publicKey = $publicKey; $this->notify_url = $notify_url; $this->return_url = $return_url; $this->config = [ 'alipay_sdk' => 'alipay-sdk-php-20180705', 'app_id' => $this->appId, 'notify_url' => $this->notify_url, 'sign_type' => $this->signType, 'charset' => $this->charset, 'timestamp' => date('Y-m-d H:i:s', time()), 'version' => $this->version ]; } /** * app支付 * @param $out_trade_no 商户订单号 * @param $total_amount 金额 * @param $subject 标题 * @return arrray */ public function app($out_trade_no, $total_amount, $subject) { $method = 'alipay.trade.app.pay'; $config = $this->config; $config['method'] = $method; $biz = [ 'total_amount' => $total_amount, 'product_code' => 'QUICK_MSECURITY_PAY', 'subject' => $subject, 'out_trade_no' => $out_trade_no ]; $arr = [ 'subject' => $biz['subject'], 'out_trade_no' => $out_trade_no, 'total_amount' => $biz['total_amount'], 'appid' => $this->appId, 'notify_url' => $this->notify_url, 'sign_type' => $this->signType ]; $biz_content = json_encode($biz, JSON_UNESCAPED_UNICODE); $config['biz_content'] = $biz_content; ksort($config); $config['sign'] = $this->sign($config); $params_url = ''; foreach ($config as $k => $v) { if (!empty($v)) { $params_url .= $k . '=' . urlencode($v) . '&'; } } $params_url = rtrim($params_url, '&'); $arr['sign'] = $params_url; return $arr; } /** * 订单查询 * @param $out_trade_no * @param $total_amount * @return bool|arrray */ public function orderQuery($out_trade_no, $total_amount = '') { $method = 'alipay.trade.query'; $config = $this->config; $config['method'] = $method; unset($config['notify_url']); $biz = [ 'out_trade_no' => $out_trade_no ]; $biz_content = json_encode($biz, JSON_UNESCAPED_UNICODE); $config['biz_content'] = $biz_content; ksort($config); $config['sign'] = $this->sign($config); $res = $this->curl($config); $res = json_decode($res, true); $res = $res['alipay_trade_query_response']; if ($res['code'] == 10000 and $res['msg'] == 'Success' and $res['trade_status'] == 'TRADE_SUCCESS') { if (empty($total_amount)) { return $res; } else { if ($res['total_amount'] == $total_amount) { return $res['trade_no']; } else { return false; } } } else { return false; } } /** * curl请求 * @param $data * @return bool|int|mixed|string */ private function curl($data) { @header("Content-type: text/html;charset=gb2312"); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSLVERSION, 1); curl_setopt($ch, CURLOPT_URL, $this->gatewayUrl); if (is_array($data)) { curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); } elseif (is_string($data)) { curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, true); $content = curl_exec($ch); curl_close($ch); return $content; } /** * 签名 * @param $data * @return bool|string */ private function sign($params) { $stringToBeSigned = ""; $i = 0; foreach ($params as $k => $v) { if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) { if ($i == 0) { $stringToBeSigned .= "$k" . "=" . "$v"; } else { $stringToBeSigned .= "&" . "$k" . "=" . "$v"; } $i++; } } unset ($k, $v); // 私钥处理 $res = "-----BEGIN RSA PRIVATE KEY-----" . PHP_EOL . wordwrap($this->privateKey, 64, PHP_EOL, true) . PHP_EOL . "-----END RSA PRIVATE KEY-----"; ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置'); openssl_sign($stringToBeSigned, $sign, $res, OPENSSL_ALGO_SHA256); $key = base64_encode($sign); return $key; } private function checkEmpty($value) { if (!isset($value)) return true; if ($value === null) return true; if (trim($value) === "") return true; return false; } }
2019年11月04日
16 阅读
0 评论
0 点赞