php实现微信以及小程序扫码支付的代码

php实现微信以及小程序扫码支付的代码

内容导读

收集整理的这篇技术教程文章主要介绍了php实现微信以及小程序扫码支付的代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4235字,纯文字阅读大概需要7分钟

内容图文

本篇文章给大家带来的内容是关于php实现微信以及小程序扫码支付的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
<?php //微信支付/** * 适用于微信所有支付, 扫码支付 小程序支付
 二维码的需要接入生成二维码的代码,这个可以共用*

xml 根据文档自行删改, 共用微信统一下单dome
*/

class Payapi{



统一下单


public function Pay($orderid,$total_fee){
 参数是订单号 加金额,
可以改动,




 $fee = $total_fee;//举例充值0.01




$appid ='';//如果是公众号 就是公众号的appid




$body = '名字';




$mch_id ='商户号';




$nonce_str = $this->nonce_str();//随机字符串




$notify_url ='回调地址';




$out_trade_no = $orderid;//商户订单号




$spbill_create_ip = '主机ip';




$total_fee = $fee*100;//因为充值金额最小是1 而且单位为分 如果是充值1元所以这里需要*100




$trade_type = 'NATIVE';//交易类型 默认




//这里是按照顺序的 因为下面的签名是按照顺序 排序错误 肯定出错




$post['appid'] = $appid;




$post['body'] = $body;




$post['mch_id'] = $mch_id;




$post['nonce_str'] = $nonce_str;//随机字符串




$post['notify_url'] = $notify_url;



//
$post['openid'] = $openid;




$post['out_trade_no'] = $out_trade_no;




$post['spbill_create_ip'] = $spbill_create_ip;//终端的ip




$post['total_fee'] = $total_fee;//总金额 最低为一块钱 必须是整数




$post['trade_type'] = $trade_type;




$sign = $this->sign($post);//签名




$post_xml = '<xml>







 <appid>'.$appid.'</appid>







 <body>'.$body.'</body>







 <mch_id>'.$mch_id.'</mch_id>







 <nonce_str>'.$nonce_str.'</nonce_str>







 <notify_url>'.$notify_url.'</notify_url>







 <openid>'.$openid.'</openid>







 <out_trade_no>'.$out_trade_no.'</out_trade_no>







 <spbill_create_ip>'.$spbill_create_ip.'</spbill_create_ip>







 <total_fee>'.$total_fee.'</total_fee>







 <trade_type>'.$trade_type.'</trade_type>







 <sign>'.$sign.'</sign>






</xml> ';




//统一接口prepay_id




$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';




$xml = $this->http_request($url,$post_xml);




$array = $this->xml($xml);//全要大写




if($array['RETURN_CODE'] == 'SUCCESS' && $array['RESULT_CODE'] == 'SUCCESS'){






$time = time();






$tmp='';//临时数组用于签名






$tmp['appId'] = $appid;






$tmp['nonceStr'] = $nonce_str;






$tmp['package'] = 'prepay_id='.$array['PREPAY_ID'];






$tmp['signType'] = 'MD5';






$tmp['timeStamp'] = "$time";






$data['state'] = 1;






$data['timeStamp'] ="$time";//时间戳






$data['nonceStr'] = $nonce_str;//随机字符串






$data['signType'] = 'MD5';//签名算法,暂支持 MD5






$data['package'] = 'prepay_id='.$array['PREPAY_ID'];//统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=*






$data['paySign'] = $this->sign($tmp);//签名,具体签名方案参见微信公众号支付帮助文档;






$data['out_trade_no'] = $out_trade_no;






 $data['CODE_URL']
=$array['CODE_URL'];




}else{






$data['state'] = 0;






$data['text'] = "错误";






$data['RETURN_CODE'] = $array['RETURN_CODE'];






$data['RETURN_MSG'] = $array['RETURN_MSG'];




}



return
json_encode($data);


}private function nonce_str(){//随即字符串




$result = '';




$str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz';




for ($i=0;$i<32;$i++){






$result .= $str[rand(0,48)];




}




return $result;


}


//生成订单号


private function order_number($openid){



// date('Ymd',time()).time().rand(10,99);//18位


return md5($openid.time().rand(10,99));//32位


}


//签名 $data要先排好顺序


private function sign($data){


ksort($data);




$stringA = '';




foreach ($data as $key=>$value){






if(!$value) continue;






if($stringA) $stringA .= '&'.$key."=".$value;






else $stringA = $key."=".$value;




}




$wx_key = '';//申请支付后有给予一个商户账号和密码,登陆后自己设置key


$stringSignTemp = $stringA.'&key='.$wx_key;//申请支付后有给予一个商户账号和密码,登陆后自己设置key


return strtoupper(md5($stringSignTemp));

}


//curl请求啊


function http_request($url,$data = null,$headers=array())


{




$curl = curl_init();




if( count($headers) >= 1 ){






curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);




}




curl_setopt($curl, CURLOPT_URL, $url);




curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);




curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);




if (!empty($data)){






curl_setopt($curl, CURLOPT_POST, 1);






curl_setopt($curl, CURLOPT_POSTFIELDS, $data);




}




curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);




$output = curl_exec($curl);




curl_close($curl);




return $output;


}


//获取xml


public function xml($xml){




$p = xml_parser_create();




xml_parse_into_struct($p, $xml, $vals, $index);




xml_parser_free($p);




$data = "";




foreach ($index as $key=>$value) {






if($key == 'xml' || $key == 'XML') continue;






$tag = $vals[$value[0]]['tag'];






$value = $vals[$value[0]]['value'];






$data[$tag] = $value;




}




return $data;


}}

相关推荐:

微信扫红码 微信支付扫码支付php版

PHP实现微信扫码支付功能

以上就是php实现微信以及小程序扫码支付的代码的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php实现微信以及小程序扫码支付的代码全部内容,希望文章能够帮你解决php实现微信以及小程序扫码支付的代码所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com