欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > php >内容正文

php

php 微信native扫码支付 -凯发k8官方网

发布时间:2023/12/31 php 31 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 native支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于pc网站支付、实体店单品或订单支付、媒体广告支付等场景。

支付类:

self::appid,'attach' => 'pay','body' => $body,'mch_id' => self::mchid,'nonce_str' => $this->createnoncestr(),'notify_url' => self::notifyurl,'out_trade_no' => $outtradeno,'spbill_create_ip' => $this->get_client_ip(),'total_fee' => intval($totalfee * 100),//单位 转为分'trade_type' => 'native',);$unified['sign'] = $this->getsign($unified, self::key);$responsexml = $this->curlpost('https://api.mch.weixin.qq.com/pay/unifiedorder', $this->arraytoxml($unified));//禁止引用外部xml实体libxml_disable_entity_loader(true);$unifiedorder = simplexml_load_string($responsexml, 'simplexmlelement', libxml_nocdata);if (false === $unifiedorder) {checking::response(201,'parse xml error');}if ('success' != $unifiedorder->return_code) {checking::response(202,$unifiedorder->return_msg);}if ('success' != $unifiedorder->result_code) {checking::response(203,$unifiedorder->err_code);}$codeurl = (array) ($unifiedorder->code_url);if (!$codeurl[0]) {checking::response(203,'get code_url error');}//生成二维码 这里利用qrcode类库生成的二维码 可根据自己业务进行修改return $this->wepayqrcode($codeurl[0]);}//获取随机字符串-wechatpaypublic function createnoncestr($length = 16){$chars = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789';$str = '';for ($i = 0; $i < $length; $i) {$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);}return $str;}//获取当前服务器时间-wechatpaypublic function get_client_ip(){if ($_server['remote_addr']) {$cip = $_server['remote_addr'];} elseif (getenv('remote_addr')) {$cip = getenv('remote_addr');} elseif (getenv('http_client_ip')) {$cip = getenv('http_client_ip');} else {$cip = 'unknown';}return $cip;}//获取签名public function getsign($params, $key){ksort($params, sort_string);$unsignparastring = $this->formatqueryparamap($params, false);$signstr = strtoupper(md5($unsignparastring.'&key='.$key));return $signstr;}//生成签名public function formatqueryparamap($paramap, $urlencode = false){$buff = '';ksort($paramap);foreach ($paramap as $k => $v) {if (null != $v && 'null' != $v) {if ($urlencode) {$v = urlencode($v);}$buff .= $k.'='.$v.'&';}}$reqpar = '';if (strlen($buff) > 0) {$reqpar = substr($buff, 0, strlen($buff) - 1);}return $reqpar;}//发送微信支付请求public function curlpost($url = '', $postdata = '', $options = array()){if (is_array($postdata)) {$postdata = http_build_query($postdata);}$ch = curl_init();curl_setopt($ch, curlopt_url, $url);curl_setopt($ch, curlopt_returntransfer, 1);curl_setopt($ch, curlopt_post, 1);curl_setopt($ch, curlopt_postfields, $postdata);curl_setopt($ch, curlopt_timeout, 30); //设置curl允许执行的最长秒数if (!empty($options)) {curl_setopt_array($ch, $options);}//https请求 不验证证书和hostcurl_setopt($ch, curlopt_ssl_verifypeer, false);curl_setopt($ch, curlopt_ssl_verifyhost, false);$data = curl_exec($ch);curl_close($ch);return $data;}//将数组转为xmlpublic function arraytoxml($arr){$xml = '';foreach ($arr as $key => $val) {if (is_numeric($val)) {$xml .= '<'.$key.'>'.$val.'';} else {$xml .= '<'.$key.'>';}}$xml .= '';return $xml;}//生成微信支付二维码public function wepayqrcode($url){include '../extend/wxpay/example/phpqrcode/phpqrcode.php';$value = $url;//二维码内容$errorcorrectionlevel = 'l';//容错级别$matrixpointsize = 5;//生成图片大小//生成二维码图片try {$filename = 'qrcode/'.'local'.time().'.png';\qrcode::png($value, $filename, $errorcorrectionlevel, $matrixpointsize, 2);$qr = $filename;//已经生成的原始二维码图片文件$qr = imagecreatefromstring(file_get_contents($qr));//输出图片imagepng($qr, 'qrcode/'.'qrcode.png');imagedestroy($qr);return $filename;}catch (exception $exception){checking::response($exception->getcode(),$exception->getmessage());}} }

 调用支付

$wx= new wxnative();$order_num=checking::ordernum();$payurl= api_url.'/'.$wx->wxnativepay($money,$order_num);

回调数据接收

public function wxpaynotify(){$params = trim(file_get_contents('php://input'));$xml = (array)simplexml_load_string( $params, 'simplexmlelement', libxml_nocdata ); //将微信返回的xml 转换成数组if ('success' == $xml['return_code']) {//成功回调异步通知地址//订单支付成功$data['out_trade_no'] = $xml['out_trade_no'];$data['pay_number'] = $xml['openid'];$data['trade_num'] = $xml['transaction_id'];$data['pay_time'] = $xml['time_end'];checking::writelog(json_encode($data),'回调开始','newwxpay.txt');db::starttrans();try {#业务逻辑} else {db::rollback();checking::writelog('异步通知地址回调失败','异步通知地址回调失败','newwxpay.txt');} }

 

总结

以上是凯发k8官方网为你收集整理的的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图