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中小程序下单支付方法