php中的微信小程序下单支付
时间:
推荐文章
根据微信小程序的API 参考接口进行对接,废话不多说直接上代码
public function payWx($appid,$mch_id,$openid,$money,$body){
$key = 'XXXXXX'; //$key是在微信公众平台中获取的
$pay['appid'] = $appid; //$appid是在微信公众平台中获取的
$pay['body'] = $body; //$body商品信息提示
$pay['mch_id'] = $mch_id; //$mch_id商户号
$pay['nonce_str'] = $this->RandStr(32); //随机字符串
$pay['notify_url'] = ' //返回的
$pay['openid'] = $openid;
$pay['out_trade_no'] = 'xxxx'.time().rand(10,9999);//订单号
$pay['spblill_create_ip'] = $_SERVER['SERVER_ADDR'];
$pay['total_fee'] = $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']."&spblill_create_ip=".$pay['spblill_create_ip']."&total_fee=".$pay['total_fee']."&trade_type=".$pay['trade_type'];
$stringB=$stringA."&key=".$key;
$sign = strtoupper(md5($stringB));
$pay['sign'] = $sign;
$url ='https://api.mch.weixin.qq.com/pay/unifiedorder';
$data =$this->arrayToXml($pay);
$res=$this->postXmlCurl($data, $url,60);
$pays=$this->xmlToArray($res);
$tete['timeStamp'] = strval(time());
$tete['nonceStr'] = $this->RandStr(32);
$tete['package'] = "prepay_id=".$pays['prepay_id'];
$stringC='appId='.$appid.'&nonceStr='.$tete['nonceStr'].'&package=prepay_id='.$pays['prepay_id'].'&signType=MD5&timeStamp='.time().'&key='.$key;
$paySign=strtoupper(md5($stringC));
$tete['paySign'] = $paySign;
$tete['msgid'] = 1;
return $tete;
}
//随机字符串
public function RandStr($length){
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$len = strlen($str)-1;
$randstr = '';
for ($i=0;$i<$length;$i++) {
$num=mt_rand(0,$len);
$randstr .= $str[$num];
}
return $randstr;
}
//数组转换成xml
private function arrayToXml($arr) {
$xml = "<xml>";
foreach ($arr as $key => $val) {
if (is_array($val)) {
$xml .= "<" . $key . ">" . arrayToXml($val) . "</" . $key . ">";
} else {
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
}
}
$xml .= "</xml>";
return $xml;
}
private static function postXmlCurl($xml, $url, $second = 30)
{
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
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_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
set_time_limit(0);
//运行curl
$data = curl_exec($ch);
//返回结果
if ($data) {
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
curl_close($ch);
throw new WxPayException("curl出错,错误码:$error");
}
}
//xml转换成数组
private function xmlToArray($xml) {
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
$val = json_decode(json_encode($xmlstring), true);
return $val;
}大体方法以上内容亲测 我只写了方法 没有把整个类都写出来 以上是在PHP中小程序下单支付方法
