* 微信h5支付
*/
public function wxh5Pay($price,$order,$body)
{
$opts = [
'appid' => $this->config->item('appid'),//appid
'mch_id' => $this->config->item('mch_id'),//商户号
'nonce_str' => md5(time() . mt_rand(1000, 9999)),
'body' => $body,
'out_trade_no' => $order,
'total_fee' => $price*100,
'spbill_create_ip' => $this->input->ip_address(),
'notify_url' => base_url() . 'Weixinpay/wxpay_back', //支付成功通知地址
'trade_type' => 'MWEB',
'scene_info' => '{"h5_info": {"type":"Wap","wap_url": "'.base_url().'","wap_name": "xxxxx活动"}}'
];
$opts['sign'] = $this->getSign($opts);
$xml = $this->array2xml($opts);
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//严格校验
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行curl
$data = curl_exec($ch);
curl_close($ch);
$res = $this->xml2array($data);
if ($res['return_code'] == 'SUCCESS' && $res['return_msg'] == 'OK') {
$uri = 'www.baidu.com';//支付成功后跳转的页面
$url = urlencode($uri);
$config = [
'mweb_url' => $res['mweb_url'].'&redirect_url='.$url //返回的是一个url 给前端直接跳转
];
}else{
$config['errmsg'] = $res['return_msg'];
$config['errcode'] = $res['return_code'];
}
return $config;
}
//数组转xml
private function array2xml($array)
{
$xml = "<xml>" . PHP_EOL;
foreach ($array as $k => $v) {
if ($v && trim($v) != '')
$xml .= "<$k><![CDATA[$v]]></$k>" . PHP_EOL;
}
$xml .= "</xml>";
return $xml;
}
//xml转数组
private function xml2array($xml)
{
$array = array();
$tmp = null;
try {
$tmp = (array)simplexml_load_string($xml);
} catch (Exception $e) {
}
if ($tmp && is_array($tmp)) {
foreach ($tmp as $k => $v) {
$array[$k] = (string)$v;
}
}
return $array;
}
//签名
function getSign($data)
{
ksort($data);
$string1 = "";
foreach ($data as $k => $v) {
if ($v && trim($v) != '') {
$string1 .= "$k=$v&";
}
}
$stringSignTemp = $string1 . "key=".$this->config->item('key');//公众号密钥
$sign = strtoupper(md5($stringSignTemp));
return $sign;
}