PHP在PC端实现微信扫码支付模式二
来源:互联网 发布:断食四天减肥知乎 编辑:程序博客网 时间:2024/04/29 23:48
遇到的问题是微信扫码支付可以成功,但是扫码成功之后的回调函数却怎么也没有反应。
呐呐呐,敲黑板,划重点了,在网上看了好多资料说,PHP的PC端微信扫码支付模式二这个回调就是不会响应的!然后,这个回调函数在链接上是不能跟参数的,并且模式一需要在微信开发者后台配置回调地址。
所以不能太依赖它这个回调,需要自己实现微信订单查询的API,当查询结果trade_state为SUCCESS时,表明支付成功,然后处理支付成功之后的业务逻辑。
下面附上自己的订单查询代码:
static function orderQuery($data) { $url = "https://api.mch.weixin.qq.com/pay/orderquery"; $input = array(); $input['appid'] = ''; //APPID $input['mch_id'] = ''; //商户号 $input['nonce_str'] = SELF::getNonceStr(); //var_dump($input['nonce_str']); $input['out_trade_no'] = $data['is_ordered']; //生成签名 $sign = 'appid=&mch_id=&nonce_str='.$input['nonce_str'].'&out_trade_no='.$data['is_ordered'].'&key='; //key API密钥 $sign = strtoupper(md5(urldecode($sign))); $input['sign'] = $sign; //var_dump($sign); $xml = SELF::ToXml($input); //var_dump($xml); $timeOut = 6; $startTimeStamp = self::getMillisecond();//请求开始时间 $response = self::postXmlCurl($xml, $url, false, $timeOut); $result = SELF::Init($response); //self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 return $result; }
生成随机数
public static function getNonceStr($length = 32) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; }
数组转化成xml格式
public static function ToXml($input) { if(empty($input) || count($input) <= 0) { throw new WxPayException("数组数据异常!"); } $xml = "<xml>"; foreach ($input as $key=>$val) { if (is_numeric($val)){ $xml.="<".$key.">".$val."</".$key.">"; }else{ $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } } $xml.="</xml>"; return $xml; }
发送请求
private static function postXmlCurl($xml, $url, $useCert = false, $second) { $ch = curl_init(); //设置超时 curl_setopt($ch, CURLOPT_TIMEOUT, $second); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验 //设置header curl_setopt($ch, CURLOPT_HEADER, FALSE); //要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); if($useCert == true){ //设置证书 //使用证书:cert 与 key 分别属于两个.pem文件 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::SSLCERT_PATH); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::SSLKEY_PATH); } //post提交方式 curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); //运行curl $data = curl_exec($ch); //返回结果 if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); curl_close($ch); throw new WxPayException("curl出错,错误码:$error"); } }
请求的结果是xml格式的需要转化成数组格式
public static function Init($xml) { $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $array_data; }
阅读全文
0 0
- PHP在PC端实现微信扫码支付模式二
- 支付宝pc端支付接入PHP实现
- php微信支付(仅pc端扫码支付模式二)详细步骤
- php微信支付(仅pc端扫码支付模式二)详细步骤.----仅适合第一次做微信开发的程序员
- 微信扫码支付---模式一(PC端,解决中文乱码)
- c#版在pc端发起微信扫码支付
- 微信扫码支付 模式二
- 微信扫码支付模式二
- Java SpringMVC实现PC端网页微信扫码支付完整版
- Java SpringMVC实现PC端网页微信扫码支付完整版
- Java SpringMVC实现PC端网页微信扫码支付完整版
- Java SpringMVC实现PC端网页微信扫码支付完整版
- 支付宝pc端支付接入PHP端
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- resin的配置与使用
- Can't execute the query because you have a conflicting read lock
- [除法分块] Codeforces 830C Bamboo Partition
- @Transient注释和在前台显示@Transient字段
- 【codefores 612】 The Union of k-Segments 【思维+ 线段处理】
- PHP在PC端实现微信扫码支付模式二
- A problem was found with the configuration of task ':app:packageDebug'
- peewee
- 招聘真题集合
- 20170919_C++面试问题记录
- 51nod--1134 最长递增子序列
- stm32f103应用rt-thread 1.2.5搭建的Keil工程
- Oracle数据库(面试题)
- Eclipse neon中找不到server