微信APP支付 PHP后端

  • l7_160348
    了解作者
  • 15KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-14 02:27
    上传日期
在前人的车轮上修改了一下,微信APP支付验证通过,阿里的还未验证
Pay.zip
  • Pay
  • key
  • cert-2
  • log
  • conf
  • common.php
    869B
  • lib
  • Encryption.class.php
    5KB
  • Curl.class.php
    1.9KB
  • Autoload.class.php
    338B
  • WeEncryption.class.php
    6.4KB
  • Alipay.php
    1.4KB
  • WePay.php
    3.2KB
  • orderQuery.php
    3.7KB
  • WeRefund.php
    1.9KB
  • notify_verify.php
    600B
  • AliRefund.php
    1.5KB
  • w_notify_verify.php
    3KB
内容介绍
<?php class WeEncryption { private static $instance; private $sTpl; private $appid; private $mch_id; private $key; private $notify_url; private $trade_type = "APP"; private static $details; /** * 构造函数,初始化成员变量 * @param String $appid 商户的应用ID * @param Int $mch_id 商户编号 * @param String $key 秘钥 */ private function __construct() { $this->appid = APPID; $this->mch_id = MCHID; $this->key = APP_KEY; } /** * 获取当前类实例 * @return WeEncryption 本类实例 */ public static function getInstance() { if(self::$instance == null) { self::$instance = new self(); } return self::$instance; } /** * 发送下单请求; * @param Curl $curl 请求资源句柄 * @return mixed 请求返回数据 */ public function sendRequest(Curl $curl, $data) { $data = $this->setSendData($data); $url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; $curl->setUrl($url); $content = $curl->execute(true, 'POST', $data); return $content; } /** * 拼装请求的数据 * @return String 拼装完成的数据 */ private function setSendData($data) { $this->sTpl = "<xml> <appid rel='nofollow' onclick='return false;'><![CDATA[%s]]></appid> <body><![CDATA[%s]]></body> <mch_id><![CDATA[%s]]></mch_id> <nonce_str><![CDATA[%s]]></nonce_str> <notify_url><![CDATA[%s]]></notify_url> <out_trade_no><![CDATA[%s]]></out_trade_no> <spbill_create_ip><![CDATA[%s]]></spbill_create_ip> <total_fee><![CDATA[%d]]></total_fee> <trade_type><![CDATA[%s]]></trade_type> <sign><![CDATA[%s]]></sign> </xml>"; $nonce_str = $this->getNonceStr(); $body = $data['body']; $out_trade_no = $data['out_trade_no']; $total_fee = $data['total_fee']; $spbill_create_ip = $data['spbill_create_ip']; $trade_type = $this->trade_type; $data['appid'] = $this->appid; $data['mch_id'] = $this->mch_id; $data['nonce_str'] = $nonce_str; $data['notify_url'] = $this->notify_url; $data['trade_type'] = $this->trade_type; $sign = $this->getSign($data); $data = sprintf($this->sTpl, $this->appid, $body, $this->mch_id, $nonce_str, $this->notify_url, $out_trade_no, $spbill_create_ip, $total_fee, $trade_type, $sign); return $data; } /** * 设置通知地址 * @param String $url 通知地址; */ public function setNotifyUrl($url) { if (is_string($url)) { $this->notify_url = $url; } } /** * 获取签名; * @return String 通过计算得到的签名; */ public function getSign($params) { ksort($params); foreach ($params as $key => $item) { if (!empty($item)) { $newArr[] = $key.'='.$item; } } $stringA = implode("&", $newArr); $stringSignTemp = $stringA."&key=".$this->key; $stringSignTemp = MD5($stringSignTemp); $sign = strtoupper($stringSignTemp); return $sign; } /** * 获取随机数; * @return String 返回生成的随机数; */ public function getNonceStr() { $code = ""; for ($i=0; $i > 10; $i++) { $code .= mt_rand(10000); } $nonceStrTemp = md5($code); $nonce_str = mb_substr($nonceStrTemp, 5,37); return $nonce_str; } /** * 获取客户端支付信息 * @param Array $data 参与签名的信息数组 * @return String 签名字符串 */ public function getClientPay($data) { $sign = $this->getSign($data); return $sign; } /** * 接收支付结果通知参数 * @return Object 返回结果对象; */ public function getNotifyData() { $postXml = $GLOBALS["HTTP_RAW_POST_DATA"]; //接受通知参数; if (empty($postXml)) { return false; } $postObj = $this->xmlToObject($postXml); if ($postObj === false) { return false; } if (!empty($postObj->return_code)) { if ($postObj->return_code == 'FAIL') { return false; } } return $postObj; } /** * 解析xml文档,转化为对象 * @param String $xmlStr xml文档 * @return Object 返回Obj对象 */ public function xmlToObject($xmlStr) { if (!is_string($xmlStr) || empty($xmlStr)) { return false; } $postObj = simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA); $postObj = json_decode(json_encode($postObj)); return $postObj; } public static function saveDetails($obj) { self::$details = $obj; } /** * 查询订单状态 * @param Curl $curl 工具类 * @param string $out_trade_no 订单号 * @return xml 订单查询结果 */ public function queryOrder(Curl $curl, $out_trade_no) { $nonce_str = $this->getNonceStr(); $data = array( 'appid' => $this->appid, 'mch_id' => $this->mch_id, 'out_trade_no' => $out_trade_no, 'nonce_str' => $nonce_str ); $sign = $this->getSign($data); $xml_data = '<xml> <appid rel='nofollow' onclick='return false;'>%s</appid> <mch_id>%s</mch_id> <nonce_str>%s</nonce_str> <out_trade_no>%s</out_trade_no> <sign>%s</sign> </xml>'; $xml_data = sprintf($xml_data, $this->appid, $this->mch_id, $nonce_str, $out_trade_no, $sign); $url = "https://api.mch.weixin.qq.com/pay/orderquery"; $curl->setUrl($url); $content = $curl->execute(true, 'POST', $xml_data); return $content; } /** * 查询退款状态 * @param $out_trade_no 充值单号 */ // public function refundQuery($out_trade_no) // { // $nonce_str = $this->getNonceStr(); // $signData = array( // 'appid' => APPID, // 'mch_id' => MCHID, // 'nonce_str' => $nonce_str, // 'sign' => '', // 'out_trade_no' => $out_trade_no // ); // $sign = $this->getSign($signData); // $sData = '<xml> // <appid rel='nofollow' onclick='return false;'>'.APPID.'</appid> // <mch_id>'.MCHID.'</mch_id> // <nonce_str>'.$nonce_str.'</nonce_str> // <out_refund_no></out_refund_no> // <out_trade_no>'.$out_trade_no.'</out_trade_no> // <refund_id></refund_id> // <transaction_id></transaction_id> // <sign>'.$sign.'</sign> // </xml>'; // $curl = new Curl(); // $curl->setUrl('https://api.mch.weixin.qq.com/pay/refundquery'); // $response = $curl->execute(true, 'GET', $sData); // return $response; // } }
评论
    相关推荐
    • 微信支付 java 后端 demo
      yongJava写的一个小项目用于微信支付,自己可以参考官方文档看一下,不想看代码可直接复制粘贴
    • 微信jssdk后端接口demo
      微信jssdk后端接口demo
    • 看书阅读带后端-微信小程序
      看书阅读带后端-微信小程序,微信小程序(wei xin xiao cheng xu),简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
    • Java后端微信小程序视频教程
      Java页面静态化视频教程,使用Java进行微信小程序和服务器的交互
    • 微信分享后端接口
      简单的对前端微信分享需要的参数进行生成,针对access_token的次数时长限制加以优化,再五数据库情况下保存分享的点击量
    • 微信支付 java后端demo
      完整的demo,相信很多做微信支付的都会走很多坑,这个demo可以让你少走很多坑
    • 微信支付asp后端 少有资源
      微信支付asp后端 少有资源
    • 简易记账带后端-微信小程序
      简易记账带后端-微信小程序,微信小程序(wei xin xiao cheng xu),简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。...
    • 客家旅运带后端-微信小程序
      客家旅运带后端-微信小程序,微信小程序(wei xin xiao cheng xu),简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档