php实现 微信原生支付(扫码支付)功能
发布时间:2023-02-11 12:33:26 所属栏目:PHP 来源:
导读: 网上的很多PHP微信扫码支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,只有200行代码,希望可以给各位想接入微信扫码支付的带来些许帮助和借鉴意义。
直接运行
直接运行
|
网上的很多PHP微信扫码支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,只有200行代码,希望可以给各位想接入微信扫码支付的带来些许帮助和借鉴意义。 直接运行该文件即可得到一个支付二维码的图片。 需要注意的事项: 1.该文件需放到支付授权目录下,可以在微信支付商户平台->产品中心->开发配置中设置。 2.如提示签名错误可以通过微信支付签名验证工具进行验证:微信公众平台支付接口调试工具 代码如下: createJsBizPackage($payAmount,$outTradeNo,$orderName,$notifyUrl,$payTime); //生成二维码 $url = 'http://qr.liantu.com/api.php?text='.$arr['code_url']; echo "php实现微信原生支付(扫码支付)功能"; class WxpayService { protected $mchid; protected $appid; protected $apiKey; public function __construct($mchid,$key) { $this->mchid = $mchid; $this->appid = $appid; $this->apiKey = $key; } /** 发起订单 @param float $totalFee 收款总费用 单位元 @param string $outTradeNo 唯一的订单号 @param string $orderName 订单名称 @param string $notifyUrl 支付结果通知url 不要有问号 @param string $timestamp 订单发起时间 @return array / public function createJsBizPackage($totalFee,$timestamp) { $config = array( 'mch_id' => $this->mchid,'appid' => $this->appid,'key' => $this->apiKey,); $orderName = iconv('GBK','UTF-8',$orderName); $unified = array( 'appid' => $config['appid'],'attach' => 'pay',//商家数据包,原样返回,如果填写中文,请注意转换为utf-8 'body' => $orderName,'mch_id' => $config['mch_id'],'nonce_str' => self::createNonceStr(),'notify_url' => $notifyUrl,'out_trade_no' => $outTradeNo,'spbill_create_ip' => '127.0.0.1','total_fee' => intval($totalFee 100),//单位 转为分 'trade_type' => 'NATIVE',); $unified['sign'] = self::getSign($unified,$config['key']); $responseXml = self::curlPost('https://api.mch.weixin.qq.com/pay/unifiedorder',self::arrayToXml($unified)); $unifiedOrder = simplexml_load_string($responseXml,'SimpleXMLElement',LIBXML_NOCDATA); if ($unifiedOrder === false) { die('parse xml error'); } if ($unifiedOrder->return_code != 'SUCCESS') { die($unifiedOrder->return_msg); } if ($unifiedOrder->result_code != 'SUCCESS') { die($unifiedOrder->err_code); } $codeUrl = (array)($unifiedOrder->code_url); if(!$codeUrl[0]) exit('get code_url error'); $arr = array( "appId" => $config['appid'],"timeStamp" => $timestamp,"nonceStr" => self::createNonceStr(),"package" => "prepay_id=" . $unifiedOrder->prepay_id,"signType" => 'MD5',"code_url" => $codeUrl[0],); $arr['paySign'] = self::getSign($arr,$config['key']); return $arr; } public function notify() { $config = array( 'mch_id' => $this->mchid,); $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; $postObj = simplexml_load_string($postStr,LIBXML_NOCDATA); if ($postObj === false) { die('parse xml error'); } if ($postObj->return_code != 'SUCCESS') { die($postObj->return_msg); } if ($postObj->result_code != 'SUCCESS') { die($postObj->err_code); } $arr = (array)$postObj; unset($arr['sign']); if (self::getSign($arr,$config['key']) == $postObj->sign) { echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'; return $postObj; } } /** curl get @param string $url @param array $options @return mixed */ public static function curlGet($url = '',$options = array()) { $ch = curl_init($url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_TIMEOUT,30); if (!empty($options)) { curl_setopt_array($ch,$options); } //https请求 不验证证书和host curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); $data = curl_exec($ch); curl_close($ch); return $data; } (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐

浙公网安备 33038102330553号