ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
``` <?php namespace app\common\library; use think\Exception; use WeChatPay\Builder; use WeChatPay\Crypto\Rsa; use WeChatPay\Util\PemUtil; use function EasyWeChat\Kernel\Support\get_server_ip; class WxPay { public function goPay($data) { //CA证书及支付信息 $wxchat['appid'] = $data['appid']; $wxchat['mchid'] = $data['mchid']; $wxchat['api_cert'] = $data['api_cert']; $wxchat['api_key'] = $data['api_key']; $webdata = array( 'mch_appid' => $wxchat['appid'], 'mchid' => $wxchat['mchid'], 'nonce_str' => md5(time()), 'partner_trade_no' => $data['order_sn'], //商户订单号,需要唯一 'openid' => $data['openid'],//转账用户的openid 'check_name' => 'NO_CHECK', //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK: 'amount' => $data['money'] * 100, //付款金额单位为分 'desc' => $data['desc'], 'spbill_create_ip' => get_server_ip(), ); foreach ($webdata as $k => $v) { $tarr[] = $k . '=' . $v; } sort($tarr); $sign = implode($tarr, '&'); $sign .= '&key=' . $data['secret']; $webdata['sign'] = strtoupper(md5($sign)); $wget = $this->array2xml($webdata); $pay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; $res = $this->curl_post_ssl($pay_url, $wget, $wxchat); if (!$res) { return array('status' => 0, 'msg' => "Can't connect the server"); } $content = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA); if (strval($content->return_code) == 'FAIL') { return array('status' => 0, 'msg' => strval($content->return_msg)); } if (strval($content->result_code) == 'FAIL') { return array('status' => 0, 'msg' => strval($content->err_code), ':' . strval($content->err_code_des)); } $rdata = array( 'status' => 1, 'msg' => 'OK', 'mch_appid' => strval($content->mch_appid), 'mchid' => strval($content->mchid), 'device_info' => strval($content->device_info), 'nonce_str' => strval($content->nonce_str), 'result_code' => strval($content->result_code), 'partner_trade_no' => strval($content->partner_trade_no), 'payment_no' => strval($content->payment_no), 'payment_time' => strval($content->payment_time), ); return $rdata; } public function array2xml($arr) { $str = '<xml>'; foreach ($arr as $k => $v) { $str .= '<' . $k . '>' . $v . '</' . $k . '>'; } $str .= '</xml>'; return $str; } public function curl_post_ssl($url, $vars, $wxchat) { $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_TIMEOUT, 30);//设置执行最长秒数 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 终止从服务端进行验证 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);// curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');//证书类型 curl_setopt($ch, CURLOPT_SSLCERT, ROOT_PATH . "/public" . $wxchat['api_cert']);//证书位置 curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型 curl_setopt($ch, CURLOPT_SSLKEY, ROOT_PATH . "/public" . $wxchat['api_key']);//证书位置 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);//全部数据使用HTTP协议中的"POST"操作来发送 $data = curl_exec($ch);//执行回话 if ($data) { curl_close($ch); return $data; } else { $error = curl_errno($ch); curl_close($ch); return false; } } } ```