下面对微信支付的各个方式进行说明:
wx。
基础库2.22.1开始支持,低版本需要兼容。 按风格调用:不支持 小程序插件:支持,小程序基础库版本要求不低于2.22.1才能在插件中发起支付。
wx。
按风格调用: 支持小程序插件: 不支持微信版本: 支持微信 Mac 版本: 支持发起微信支付。 拨打之前,您需要在小程序微信公众平台-功能-微信支付入口申请接入微信支付。 更多信息可以参考微信支付开发文档:
开发指南 订单接口 支付接口 老版本(v2) 开发指南 支付接口
wx。
基础库2.16.0开始支持,低版本需要兼容。调用方式:
小程序插件:不支持
创建定制的交易组件订单并发起付款。 只需使用连接定制版交易组件的小程序即可。 普通小程序可以使用wx. 直接地。
这里我们使用第二个,wx。 方法,看看这个方法的具体使用需要哪些参数:
wx.requestPayment({ nonceStr: 'nonceStr', package: 'package', paySign: 'paySign', signType: '', timeStamp: 'timeStamp', })
复制
完整启动小程序支付需要5个参数。 看看官方的说明:
中国官员给出:
本教程使用MD5
wx.requestPayment({ timeStamp: '', nonceStr: '', package: '', signType: 'MD5', paySign: '', success (res) { }, fail (res) { } })
复制
接下来我们需要完成统一下单操作,将小程序绑定微信商户,获取商户号,在微信支付页面找到:
我的账户->API审核->V2密钥->生成随机32位密钥并输入(自己备份,不需要使用任何工具,只需随机输入并包含大写字母即可!)
接下来获取商户号()和V2密钥(key)
那! ! 如何获取wx.中的各个参数?
别担心,我已经给你踩坑了,我一定会解释清楚的!
首先我们先把整个过程解释清楚。 我们将通过统一下单获取商户号、v2密钥、小程序等参数。
详情请参见统一订单文件,其中已注明:
会返回预付费交易会话ID,那么这是做什么用的呢?
它用于获取签名
至此我们已经获得了商户编号、密钥和签名。 现在让我们开始这个详细的教程吧!
2.详细教程 1.后端.php代码
pay(); echo json_encode($return);
复制
2..php打包代码
记得修改里面的回调通知
appid = $appid;
$this->openid = $openid;
$this->mch_id = $mch_id;
$this->key = $key;
$this->out_trade_no = $out_trade_no;
$this->body = $body;
$this->attach = $attach;
$this->total_fee = $total_fee;
}
public function pay() {
//统一下单接口
$return = $this->weixinapp();
return $return;
}
//统一下单接口
private function unifiedorder() {
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$parameters = array(
'appid' => $this->appid, //小程序ID
'mch_id' => $this->mch_id, //商户号
'nonce_str' => $this->createNoncestr(), //随机字符串
// 'body' => 'test', //商品描述
'body' => $this->body,
'attach' =>$this->attach,
// 'out_trade_no' => '2015450806125348', //商户订单号
'out_trade_no'=> $this->out_trade_no,
// 'total_fee' => floatval(0.01 * 100), //总金额 单位 分
'total_fee' => $this->total_fee,
// 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], //终端IP
'spbill_create_ip' => '192.168.0.161', //终端IP
'notify_url' => '回调地址', //通知地址 确保外网能正常访问
'openid' => $this->openid, //用户id
'trade_type' => 'JSAPI'//交易类型
);
//统一下单签名
$parameters['sign'] = $this->getSign($parameters);
$xmlData = $this->arrayToXml($parameters);
$return = $this->xmlToArray($this->postXmlCurl($xmlData, $url, 60));
return $return;
}
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 arrayToXml($arr) {
$xml = "
复制
3.后台支付成功后收到微信发送的通知。
自己改一下,和自己的业务联系起来就可以了。 至于最下面那个
回声'';
以上是处理通知的。 简单来说,微信告诉你对方的支付结果。 你必须告诉对方我已经正确处理了此事,否则微信会按照一定期限通知你。 随着时间的推移,通知的频率会越来越少,直到没有通知。 建议你做一些处理,避免覆盖业务。 我们只需对微信返回的参数进行业务处理即可。 这里不用多说,自己看代码即可。
query($sq); mysqli_free_result($r);//释放 //查询订单数据进行推送 $cx_tuis_data="select * from order_pay WHERE openid='$open_id' and md_order='$attach'"; $jieguo_data=$conn->query($cx_tuis_data); $new_data=$jieguo_data->fetch_assoc(); $nnew_shopname=$new_data['shop_name']; $nnew_shopmoney=$new_data['money']; $nnew_shoptime=$new_data['time']; mysqli_free_result($jieguo_data);//释放 //消息推送 include 'payment_success_notify.php'; // $page="pages/myqj/myqj";//点击小程序订阅消息跳转的页 moban($touser,$ACCESS_TOKEN,"7IG9zV_nPkwrJTiTDI7fUkVOSwgl8h60axbdXoE6h0Q",$out_trade_no,$nnew_shopname,$nnew_shopmoney,$nnew_shoptime); //调用方法 格式(openid,ACCESS_TOKEN,模板id,数据1,数据2,数据3,数据4,数据5); echo '';
复制
4.小程序前端wxml
支付
5.小程序主要js
pay:function(){ wx.request({ url: '你的域名/payfee.php', //仅为示例,并非真实的接口地址 data: { money: '12.00',//模拟的支付金额 openid: 'o7J2i5YNkHn0nELz87HFS6zKL9oQ',//发起人openid attach:'12'//自定义参数 }, header: { 'content-type': 'application/json' // 默认值 }, success (res) { console.log(res.data) wx.requestPayment({ 'timeStamp': res.data.timeStamp, 'nonceStr': res.data.nonceStr, 'package': res.data.package, 'signType': 'MD5', 'paySign': res.data.paySign, 'success':function(res){ //支付成功 }, 'fail':function(res){ //支付失败 } }) } }) },
复制
好了,到这里,基本上就完成了!