值得注意的是,小程序支付在curl请求时会验证ssl,可手动设置配置中对应证书路径,或开发阶段先跳过验证
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
//小程序支付
function SmallPay(){
header("Content-type: text/html; charset=utf-8");
$money ="0.01" ; //
$orderCode = 'abcd1234'; // 订单号
// 随机字符串
$str=md5(time());
$nonce = str_shuffle($str);
$appid = '小程序appid';//注意是小程序的appid
$key = "123123";//商户平台-》API安全-》设置秘钥
$mch_id = $this->config["mch_id"];
$pay['appid'] = $appid;
$pay['body'] = '酒店预订'; //商品描述
$pay['mch_id'] = $this->config["mch_id"]; //商户号
$pay['nonce_str'] = $nonce; //随机字符串
$pay['notify_url'] = 'https://www.github.com';//支付成功回调
$pay['openid'] = $openid;
$pay['out_trade_no'] = $orderCode; //订单号
$pay['spbill_create_ip'] = '服务端IP'; // 终端IP
$pay['total_fee'] = 100*$money; //支付金额
$pay['trade_type'] = 'JSAPI'; //交易类型
// 组建签名
$stringA="appid=".$pay['appid']."&body=".$pay['body']."&mch_id=".$pay['mch_id']."&nonce_str=".$pay['nonce_str']."¬ify_url=".$pay['notify_url']."&openid=". $pay['openid']."&out_trade_no=".$pay['out_trade_no']."&spbill_create_ip=". $pay['spbill_create_ip']."&total_fee=".$pay['total_fee']."&trade_type=".$pay['trade_type'];
$stringSignTemp=$stringA."&key=".$key; //注:key为商户平台设置的密钥key(这个还需要再确认一下)
$sign= strtoupper(md5($stringSignTemp)); //注:MD5签名方式
$pay['sign'] = $sign; //签名
// 统一下单请求
$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
$data = $this->arrayToXml($pay);
// return $data;
$res = $this->wxpost($url,$data);
// return $res; //返回统一下单结果
// 对 统一下单返回得参数进行处理
$pay_arr = $this->xmlstr_to_array($res); //这里是数组
// if ($pay_arr['return_code'] == 'FAIL' || $pay_arr['result_code'] == 'FAIL')
// {
// echo json_encode($res);exit;
// // return $res;
// }
// 调起支付数据签名字段
$timeStamp = time();
$nonce_pay = str_shuffle($str);
$package = $pay_arr['prepay_id'];
$signType = "MD5";
$stringPay = "appId=".$appid."&nonceStr=".$nonce_pay."&package=prepay_id=".$package."&signType=".$signType."&timeStamp=".$timeStamp."&key=".$key;
$paySign = strtoupper(md5($stringPay));
$rpay['timeStamp'] = (string)$timeStamp;
$rpay['nonceStr'] = $nonce_pay;
$rpay['package'] = "prepay_id=".$package;
$rpay['signType'] = $signType;
$rpay['paySign'] = $paySign;
$rpay['orders'] = $orderCode ; //订单流水号id $order
echo json_encode($rpay);
}
function wxpost($url,$post)
{
//初始化
$curl = curl_init();
$header[] = "Content-type: text/xml";//定义content-type为xml
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
// curl_setopt($curl, CURLOPT_HEADER, 1);
//定义请求类型
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
//设置post数据
$post_data = $post;
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
//显示获得的数据
if ($data)
{
curl_close($curl);
return $data;
}else{
$res = curl_error($curl);
curl_close($curl);
return $res;
}
}
网友评论