微信小程序支付,php后台对接完整代码,全是干货呀,拿过来可以直接使用。小程序在调起微信支付之前需要5个参数,这时候就需要携带code向后台请求,然后后台根据code获取openid 再进行服务器之间的。
一、准备工作
1、小程序注册,要以公司的以身份去注册一个小程序,才有微信支付权限;
2、绑定商户号。
3、在小程序填写合法域
二、完成以上条件,你可以得到
小程序appid 小程序秘钥 这两个用于获取用户openid;
商户号id ,商户号秘钥 支付接口必须的;
三、开始开发
前台代码
调起微信支付 @param 支付价格,不填写默认为1分钱 function pay(total_fee) { var total_fee = total_fee; wx.login({ success: res = { //code 用于获取openID的条件之一 var code = res.code; wx.request({ url: 后台地址/index.php , method: POST , data: { total_fee:total_fee, code: code, header: { content-type : application/x-www-form-urlencoded // 默认值 success: function (res) { //后端返回的数据 var data = res.data; console.log(data); console.log(data[ timeStamp ]); wx.requestPayment({ timeStamp: data[ timeStamp ], nonceStr: data[ nonceStr ], package: data[ package ], signType: data[ signType ], paySign: data[ paySign ], success: function (res) { wx.showModal({ title: 支付成功 , content: , fail: function (res) { console.log(res); });
}
以下是PHP后台代码 ,这里用的是tp框架
?php namespace Home/Controller; use Think/Controller; class PayController extends Controller { /** * [callback 微信支付回调处理] * @Author zhengmingzhou * @DateTime 2018-05-22 * @return function [description] public function callback(){ vendor( Wechart.WxPay.Api vendor( Wechart.NativePay vendor( Wechart.WxPay.Data vendor( Wechart.WxPay.Notify
$result = $WxPayData- FromXml($xml); if($result[ return_code ] == SUCCESS $result[ result_code ] == SUCCESS ){ //回调逻辑处理。。。
$WX_SECRET = //AppSecret $url = https://api.weixin.qq.com/sns/jscode2session?appid= . $WX_APPID . secret= . $WX_SECRET . js_code= . $code . grant_type=authorization_code $infos = json_decode(file_get_contents($url)); $openid = $infos- openid; if(I( post.total_fee )) $total_fee=I( post.total_fee else $total_fee=0.01; $fee = 0.01;//举例充值0.01 $appid = //appid $body = 标题 $mch_id = //商户号 $nonce_str = $this- nonce_str();//随机字符串 $notify_url = //回调的url【自己填写】 $openid = $openid; $out_trade_no = $this- order_number();//商户订单号 $spbill_create_ip = //服务器的ip【自己填写】; $total_fee = $fee*100;//这里需要*100 $trade_type = JSAPI //交易类型 默认
//这里是按照顺序的 因为下面的签名是按照顺序 排序错误 肯定出错 $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
$url = https://api.mch.weixin.qq.com/pay/unifiedorder $xml = $this- http_request($url,$post_xml); $array = $this- xml($xml);//全要大写
//print_r($array); 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[ 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;
private function order_number($openid){ //date( Ymd ,time()).time().rand(10,99);//18位 return md5($openid.time().rand(10,99));//32位
$wx_key = //申请支付后有给予一个商户账号和密码,登陆后自己设置的key $stringSignTemp = $stringA. key= .$wx_key; return strtoupper(md5($stringSignTemp));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP !
相关推荐:
在php中用html_entity_decode实现HTML实体转义
以上就是微信小程序支付功能用php进行后台对接的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答