微信支付所需参数

openId         //微信用户ID  登录授权时获取

appid           //公众号appid  微信公众号获取

appSecret    //公众号appkey  微信公众号后台获取

mch_id         //商户号mechid   微信商户号后台获取

mchsecret    //商户api秘钥  微信商户号后台获取

    //控制器操作public function Pay(){$fee = '0.01'; //支付金额$body = '微信支付测试'; //交易描述$openid =''; 发起支付的用户openid$data = ['body' => $body , 'fee' => $fee , 'openId' => $openid];$data['out_trade_no'] = '65461348974616'; //支付订单号$result = $this -> toPay($data); if($result['return_code'] == "SUCCESS" && $result['result_code'] == "SUCCESS"){return json($this->returnData('99','支付成功',$result));}else{$data['RETURN_CODE'] = $result['RETURN_CODE'];$data['RETURN_MSG'] = $result['RETURN_MSG'];return json($this -> returnData(1, '未知错误',$data));}}
public function toPay($param)
{$resData = [];$body = empty($param['body']) ? '' : $param['body'];  //描述$orderSn = $param['out_trade_no']; //订单号$totalFee = empty($param['fee']) ? 0.01 : $param['fee'];   //金额$openId = empty($param['openId']) ? '' : $param['openId'];  //用户openId//统一下单参数构造$unifiedOrder = array('appid' => $this ->AppID, //公众号appid'mch_id' => $this ->MchId,  //商户号mchid'nonce_str' => $this->getNonceStr(), //随机字符串'body' => $body,  //支付描述'out_trade_no' => $orderSn,   //订单号'total_fee' => $totalFee*100,   //支付金额'spbill_create_ip' => $this->getIp(),  //获取本地id'notify_url' => $this->_payCfg['notify_url'],//todo 你的支付回调url'trade_type' => 'JSAPI',   //支付类型'openid' => $openId     //支付用户openid);$unifiedOrder['sign'] = $this->makeSign($unifiedOrder);//请求数据,统一下单$xmlData = $this->toxml($unifiedOrder);$res = $this->postxmlCurl($this->_payCfg['request_url'], $xmlData);$content = $this->toArr($res);$res = self::xmlToArray($res);$res['pay'] = $unifiedOrder;return $res;
}/*** 生成签名* @param $unifiedOrder* @param $mchSecret* @return string*/
public function makeSign($unifiedOrder)
{//签名步骤一:按字典序排序参数ksort($unifiedOrder);$string = $this->toUrlParams($unifiedOrder);//签名步骤二:在string后加入KEY$string = $string . "&key=" . $this -> MchSecret;//签名步骤三:MD5加密$string = md5($string);//签名步骤四:所有字符转为大写$result = strtoupper($string);return $result;
}
/*** 格式化参数格式化成url参数* @param $unifiedOrder* @return string* @internal param $unifiedOrder*/
public function toUrlParams($unifiedOrder)
{$buff = "";foreach ($unifiedOrder as $k => $v) {if ($k != "sign" && $v != "" && !is_array($v)) {buff .= $k . "=" . $v . "&";}}$buff = trim($buff, "&");return $buff;
}/*** 输出xml字符* @param $unifiedOrder* @return string*/
public function toxml($unifiedOrder)
{if (!is_array($unifiedOrder) || count($unifiedOrder) <= 0) exit('数组异常');$xml = "<xml>";foreach ($unifiedOrder as $key => $val) {if (is_numeric($val)) {$xml .= "<" . $key . ">" . $val . "</" . $key . ">";} else {$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";}}$xml .= "</xml>";return $xml;
}/*** auth: bruce* 以post方式提交xml到对应的接口url* 2021/3/23* @param $url* @param $xml* @param int $time_out* @param bool $cert* @return bool|string*/
public function postxmlCurl($url, $xml, $time_out = 30)
{$ch = curl_init();curl_setopt($ch, CURLOPT_TIMEOUT, $time_out);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);curl_setopt($ch, CURLOPT_HEADER, FALSE);curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);$data = curl_exec($ch);if ($data) {curl_close($ch);return $data;} else {$error = curl_errno($ch);curl_close($ch);exit("curl出错,错误码:$error");}
}
/*** 将xml转为array* @param $xml* @return mixed*/
public function toArr($xml){//将xml转为array,禁止引用外部xml实体libxml_disable_entity_loader(true);$values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);return $values;
}
/*** XML 转数组* @param $xml* @return mixed*/
private function xmlToArray($xml)
{//禁止引用外部xml实体libxml_disable_entity_loader(true);$values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);return $values;}

PHP 微信JSP支付相关推荐

  1. h5通过php微信支付宝支付,用H5调用支付微信公众号支付的解析

    这篇文章主要为大家详细介绍了微信公众号支付H5调用支付,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近项目需要微信支付,然后看了下微信公众号支付,虽然不难,但是细节还是需要注意的,用了大半天时 ...

  2. 微信红包支付--发放普通红包

    发放规则 普通红包:一次只发给一个用户 注:红包金额大于200时,请求参数scene_id必传(使用的场景需在商户平台--产品中心--现金红包--产品设置中设置,设置金额的有效期为一个月,下面程序用到 ...

  3. 微信统一支付详解,坑太多,不得不写

    最近开发app支付,支付宝按照开发文档很快搞定,本想微信支付开发也一样的容易,结果我错了,一路踩坑不断,到最后终于完成,耗了不少时间和精力,所以想写一篇关于微信统一支付的开发过程,希望大家能少走弯路 ...

  4. 微信整合支付和退款以及回掉

    参数整合 @Data @Component @ConfigurationProperties(prefix = "weachat") public class WeachatPro ...

  5. 微信架构 支付架构(下)

    微信架构 & 支付架构(下) 管理网络请求 首先看看原来 iOS 处理支付网络请求的缺陷: 原来支付的请求,都是通过一个单例网络中心去发起请求,然后收到回包后,通过抛通知,或者调用闭包的方式回 ...

  6. 微信架构 支付架构(上)

    微信架构 & 支付架构(上) 一. 微信和支付宝对比 这两者现在已经占领了移动支付的90%市场,支付形式也都大抵相同,只是在实现细节上略微不同.这里之所以要专门对比,是因为有些接口的不同在后边 ...

  7. (用微信扫的静态链接二维码)微信native支付模式官方提供的demo文件中的几个bug修正...

    原文:(用微信扫的静态链接二维码)微信native支付模式官方提供的demo文件中的几个bug修正 native支付模式一demo(用微信扫的静态链接二维码)BUG修复,一共4个BUG 1.nativ ...

  8. 解决iOS微信H5支付跳转微信后不返回App问题(Swift-WKWebview)(转)

    解决iOS微信H5支付跳转微信后不返回App问题(Swift-WKWebview)(转) 参考文章: (1)解决iOS微信H5支付跳转微信后不返回App问题(Swift-WKWebview)(转) ( ...

  9. JAVA微信APP支付接口整合

    2019独角兽企业重金招聘Python工程师标准>>> 上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它 ...

最新文章

  1. 2022-2028年中国硝化棉行业市场研究及前瞻分析报告
  2. 开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...
  3. 【NET CORE微服务一条龙应用】第三章 认证授权与动态权限配置
  4. pythony语法小练习
  5. java EF6,EF Core 2.0和EF6(Entity Framework 6)中配置实体映射关系
  6. php项目从本地apache移到linux的nginx上,遇到的一些访问权限和报错的问题。
  7. 【英语学习】【English L06】U03 House L5 Renting a House
  8. 大地高、正高和正常高及高程异常
  9. EXCEL的VLOOKUP匹配失败是什么原因呢
  10. MySQL-数据库查询语言
  11. Flash MX ActionScript字典
  12. java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part7(Redis常见使用(部署)方式:单机模式、主从模式、哨兵模式、集群模式)~整起
  13. IAR for ARM系列教程(四)_菜单(Ⅱ)
  14. The installer has encountered an unexpected error installing this package.this may indicate a proble
  15. 转 FTP搜索引擎的设计与实现(优化版)
  16. wordpress 文章插入的超链接访问不了
  17. 基于uclinux 的CAN 总线嵌入式驱动编程
  18. 安装Windows7虚拟机+ERPU8-10.1软件+SQLserver2008R2
  19. Zabbix5系列-监控SpringBoot内置的Tomcat和JVM(二十一)
  20. 通用流量录制回放工具 jvm-sandbox-repeater 尝鲜 (四)——新版带界面 console 的使用

热门文章

  1. 北京大学肖臻老师《区块链技术与应用》ETH笔记 - 8.0 ETH挖矿难度的调整
  2. HDFS HA支持多Standby节点机制
  3. 有么有免费的logo生成器?大家看中的是哪款?
  4. 水果店群发朋友圈文案,水果店发朋友圈文案
  5. grbl控制3轴机械臂 原理 实现 (四) 之GRBL源码修改驱动三轴机械臂
  6. 不同公司系统的对接心得
  7. 硬盘盒CE认证-EMC测试标准与流程
  8. IP地址和域名的关系
  9. 《ESP32-Arduino开发》GUI设计 LVGL 开发环境搭建教程(从工程目录到模拟器)
  10. xml报错 Parse Fatal Error :在实体引用中,实体名称必须紧跟在''后面