VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云优惠活动
荫云优惠活动

小程序支付及退款流程详解(通过小程序订购的商品如何退款)

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

文章目录

微信小程序付款及退款流程

最近在做微信小程序的时候其中,我涉及到小程序的支付和退款流程,所以这部分我已经看了很多遍,所以我会在这篇博客中总结一下。

首先说明一下,微信小程序支付的主要逻辑集中在后端。 前端只需携带支付所需的数据请求后端接口,然后返回结果并处理相应的成功或失败。 我在后端使用 PHP。 当然,在这篇博客中我不会贴出大量的代码来解释支付的具体实现,而是主要关注整个支付流程和一些细节。 所以使用其他后端语言的朋友如果愿意可以看一下。 很多时候,开发需求和相应的问题解决方案实际上需要从系统和流程的角度来考虑,超越语言语法的层面。 好了,废话不多说了。 让我们进入正题吧。

1.支付

支付主要分为几个步骤:

从这几个步骤来看,后端的主要功能就是将支付所需的数据发送到微信服务器,原来这是案件。 根据响应结果判断支付是否成功。 这个过程非常容易理解。 打个比方来说,前端就像顾客,后端就像商店,微信服务器的集成点餐界面就像收银机。 顾客告诉店家,我是谁,现在我想买什么什么就付给你多少钱。 店主对收银员说道:“某某要付多少钱?请准备好收钱。” 收银员拿了钱,去告诉店家我拿了钱,可以给她一些东西。

下面详细介绍各个步骤的具体实现。

1.前端支付请求

前端支付请求中只携带支付所需的数据,如用户ID、支付金额、支付订单ID等。 **业务逻辑** * 相关。 或者 **在微信小程序中使用wx.request()请求后端支付接口,配合下一步向微信服务器请求支付集成点餐接口所需数据。

2. 前端支付请求

后端收到前端发送的支付请求后,可以进行相关验证,比如判断用户是否有问题、支付金额是否正确等。 确认没有问题可以向微信服务器申请支付后,后台应使用微信指定的数据格式请求微信集成支付订单接口。

在微信中请求指定数据:这需要更多代码实现。 由于需要的数据量很大,还需要加密并以XML格式发送。 首先,以下数据是使用小程序支付时需要提供给微信服务器的参数。

小程序应用。 写小程序的人大概没有人不知道这一点。 。 。

用户 ID openid。 即用户的小程序ID。 我在之前的博客中解释了如何获取它。

卖家编号 mch_id。 成功申请微信支付卖家认证后,微信发送的邮件中会包含卖家订单号out_trade_no。 商家为此付款生成的订单号。

总金额total_fee 。 请务必注意,订单总金额以美分为单位。

微信服务器回调通知接口地址notification_url。 微信确认钱到账后,会向该地址发送多条消息,表明客户已付款。

需要回复。 发送至微信的消息表明您已收到通知。 。 该地址不能包含端口号,并且必须能够直接接受 POST 方法请求。

交易类型 trade_type。 微信小程序支付值统一为JSAPI

商品信息体。 格式类似于“腾讯-游戏”

终端IP地址spbill_create_ip.终端地址IP.请求支付的IP地址。

随机字符串nonce_str.后端随机生成的字符串将是

对签名进行相应的处理(处理方法见下面的代码,可以直接复用)

将以上数据处理完毕后,使用微信支付集成订单接口https://api.mch.weixin.qq 将数据整理成XML格式。 .com/pay/unifiedorder

3.后端是微信服务器接收

微信服务器收到支付数据后,如果有的话数据没有问题,就会返回支付对应的数据,很重要的是这个数据字段叫prepay_id,必须返回给前端,这样支付才能继续。微信服务器,后端应该进行相应的处理,最终返回如下数据给前端: - 至此,后端支付接口完成了接收前端支付请求并返回前端支付所需数据的功能。 .

4.前端发起支付。

前端收到支付请求后,使用wx.requestPayment()请求支付,该接口需要的对象参数就是data。 p>5.后端接受微信服务器回调

前端已完成。 支付完成后,微信服务器会确认支付已完成,并向您在第一步设置的回调地址发送通知。确定付款是否已完成并确定进一步的操作。

请注意,收到微信服务器的回调通知后,我们会根据通知的result_code字段判断支付是否成功。 后端收到成功通知后,必须向微信服务器返回成功数据,并通知微信服务器收到回调通知。 否则微信服务器会继续向后台发送消息。 另外,微信通知以XML格式发送,请谨慎接收和处理。

这是微信上常见的支付流程。 下面是PHP语法的微信支付类。 请参阅上述步骤以便更好地理解。 如果需要支付,可以通过直接传递参数的方式实例化该类,并调用该类的pay方法。

//微信支付类WeiXinPay{ //========【基本信息设置】======================== ============= //微信公众号唯一标识被保护,输入$APPID = appid;//appid. $APPSECRET = Secret;在微信公众平台上受保护。 //接受方ID,身份识别符 protected $MCHID = '11111111';//商户ID //商户支付密钥Key protected $KEY = '192006250b4c09247ec02edce69f6a2 d'; //回调通知接口 protected $APPURL = 'https:// smart. afei.com/receivesuc'; //交易类型被保护 $TRADETYPE = 'JSAPI'; //商品类型信息被保护 $BODY = 'wx/book'; //微信支付类构造函数 __construct( $openid,$outTradeNo, $总铁e){ $this->openid = $openid; // 用户唯一标识符 $this->outTradeNo = $outTradeNo; //产品编号 $this->totalFee = $totalFee; //微信支付类暴露的支付接口 public function pay(){ $result = $this->weixinapp(); Returns $result. } //处理微信集成订单接口返回的支付相关数据。 private function weixinapp() {$unifiedOrder = $this->unifiedOrder(); $parameters = 数组时间戳'=>''. time().'',//时间戳 'nonceStr'=>$this->createNoncestr(),//随机字符串 'package'=>'prepay_id='.$unifiedorder['prepay_id'],//数据package 'signType'=>'MD5'//签名方法 ); $parameters['paySign']=$this->getSign($parameters); } /**微信统一下单接口请求 */ private function Unifiedorder(){ $parameters = array( 'appid' => $this->APPID,//小程序ID 'mch_id'=> $this->MCHID , //卖家ID 'spbill_create_ip'=>$_SERVER['REMOTE_ADDR'],//终端IP 'notify_url'=>$this->APPURL, //通知地址 'nonce_str'=> $this- > createNoncestr (), //随机字符串 'out_trade_no'=>$this->outTradeNo,//卖家订单号 'total_fee'=>floatval($this->totalFee), //总金额 'open_id' => $ this -> Openid, // 用户 Openid 'Trade_type' => $this -> tradEype, // 交易类型 'body' => $this -> Body, 产品信息 );符号'] = $this->getSign($parameters); $xmlData = $this->arrayToXml($parameters);$xml_result = $this->postXmlCurl($xmlData,'https://api.mch.weixin.qq.com/pay/unifiedorder',60); $result = $this->xmlToArray($xml_result) ); 返回$结果。 } //数组转字符串方法 protected function arrayToXml($arr){ $xml = ""; foreach ($arr as $key=>$val) { if ( is_numeric($val )){ $ $xml. ="".$val."".$key.">"; >"; return $xml; } protected function xmlToArray($xml){ $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $array_data; } //XML 请求方法发送 private static function postXmlCurl($xml, $url, $sec = 30) { setopt($ch, CURLOPT_URL , $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); FALSE); //严格验证 //设置头部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 ); , CURLOPT_TIMEOUT, 40); //执行curl $data =curl_exec($ch); //返回结果 if ($data) {curl_Close($ch);返回$data;} else {$error =curl_errno($ch); Throw New WXPayException("CURL错误,错误代码:$error");}}/* *对对发送到微信集成点餐接口的数据进行签名 */ protected function getSign($Obj){ foreach ($Obj as $ k => $v){ $Parameters[$k] = $v } //签名步骤1:按字典顺序对参数进行排序 ksort($Parameters); $String = $this->formatBizQueryParaMap($Parameters, false); //签名第二步:在字符串后面添加 KEY $String = $ String."&key= ".$ this->KEY; //签名步骤3:MD5加密 $String = md5($String); //签名步骤4:将所有字符转换为大写 $result_ = strtoupper ($String); }                                                            操作格式BizQueryParaMap($paraMap, $urlencode) { } 。 $buff) > 0) { $reqPar = substr($buff, 0, strlen($buff)-1); $reqPar 函数 createNoncestr($length = 32){ $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; "; for ( $i = 0; $i

以上就是微信支付的相关流程,思路清晰了,流程就比较清晰简单了,要点如下:您需要了解几个细节,例如数据格式、加密方法等。

我们来讨论一下微信小程序退款的具体实现。

2.退款

小程序退款流程与流程 支付方式类似,但细节上有一些差异。

退款的第一步通常包括:

  1. 用户点击前端退款按钮后,后端将用户的退款请求呈现给商城后端。 一旦商户确定允许退款,后台就会向微信退款接口发起请求退款。
  2. 后端向微信退款接口发送请求后,检索响应信息,判断退款是否完成,并根据退款是否完成显示订单状态等信息。改变业务逻辑。

与微信支付相比,退款流程相对简单。

请注意以下两点:
1.通过微信退款接口申请退款后,您可以根据收到的回复直接判断退款是否完成。 无需配置任何特殊的回调接口来等待微信通知。 当然,如果您愿意,您可以在微信商户平台上配置回调接口来接受微信回调,但这不是必须的。
2.退款请求要求请求服务器安装微信提供的安全证书。 也就是说,与支付请求相比,发起退款请求时,请求方法不能重复使用,因为微信退款必须包含证书请求。 成功申请微信销售账号后,可在微信销售平台下载该证书。 Linux 上 PHP 开发环境的证书只需放置在网站根目录的 cert 文件夹中。 其他开发环境可能需要导入操作。

退款具体步骤说明如下。

1.用户发起退款请求

用户发起退款请求前端启动,后端启动收到退款请求,将对应订单标记为待退款,确认卖家同意退款后,才执行相应操作。 2、卖家发起退款请求 卖家同意退款后,后台发起请求。微信支付API,还需要将退款请求以XML形式发送给微信退款API [https://api.mch.weixin.qq.com/pay/refund](https://api.mch. weixin.qq.com/pay) /refund )

退款请求所需参数如下(支付接口请求中也使用多个参数):

商户号 mch_id 成功申请微信支付商户认证后邮件中包含卖家订单号out_trade_no,后台生成的退款订单号是唯一的,因为多个相同的退款订单号只需要退款一次,操作员op_user_id与商家相同。 number和nonce_str与支付请求签名相同 3.发起退款请求后,退款是否成功可以根据XML的result_code字段直接判断生成的请求响应。不必等待订单状态或上述任何后续操作通知来确定请求的状态,因此,如果您需要微信服务器,则需要它。如果您想向后台发送通知,可以到微信销售平台进行设置。

因为退款流程和支付类似,所以我们选择直接从退款PHP类继承支付类。 这是代码: 请注意退款请求方法 postXmlSSLCurl 和付款请求方法 postXmlCurl 之间的区别。 这就是我上面说的。 退款需要使用双向凭证。

class WinXinRefund extends WeiXinPay{ protected \$SSLCERT_PATH = 'cert/apiclient_cert.pem';//证书路径 protected \$SSLKEY_PATH = 'cert/apiclient_key.pem';//证书路径 protected \$opUserId = '1234567899 ';//卖家编号函数 __construct($openid,$outTradeNo,$totalFee,$outRefundNo,$refundFee){ //初始化退款类所需的变量 $this->openid = $openid; >outTradeNo = $outTradeNo; $this->总费用 = $总费用; $this->outRefundNo = $outRefundNo; $this->退款费用 = $退款费用 } public function return(){ //对外暴露Refund API $result = $this->wxrefundapi();返回$结果。 } private function wxrefundapi(){ //微信API退款处理 $parma = array( 'appid'=> $this->APPID, 'mch_id'=> $this- >MCHID , 'nonce_str'=> $this->createNoncestr(), 'out_refund_no'=> $this->outRefundNo, 'out_trade_no'=> $this->outTradeNo, 'total_fee'=> $this[ $xmldata); = $this->arrayToXml($parma); $xmlresult = $this->postXmlSSLCurl($xmldata,'https://api.mch.weixin.qq.com/secapi/pay /refund'); $结果 = $this->xmlToArray($xmlresult);返回$结果。 } //需要证书的请求 function postXmlSSLCurl($xml,$url,$second=30) { //如果有代理,在这里设置 //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8 '); //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); //设置头部结果是一个字符串,必须打印到屏幕上。 // 设置证书 // 使用证书:证书和密钥各属于两个.pem 文件 // 默认格式为PEM,可以注释掉curl_setopt($ch,CURLOPT_SSLCERTTYPE, 'PEM'); ,CURLOPT_SS LCERT , $this->SSLCERT_PATH);// 默认格式为PEM,但可以添加注释curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); //Post发送方法curl_setopt($ch, CURLOPT _POST, true );; $CH, CURLOPT_POSTFIELDS, $xml); $data =curl_exec($ch); // 返回结果 if ($data) {Curl_Close($ch);} Else {$Error =curl_errno($ch); echo "Crl错误,错误代码:$error"; "
" "; cur_Close($ch); return false;}} ## 3.以上总结了微信支付与退款、退款处理以及退款流程。相关知识介绍。本文涉及PHP类相关内容微信支付和退款比较复杂,很多人直接看官方文档可能会感到困惑,所以阅读本文了解流程和要点可以阅读微信官方文档,对小程序有更清晰的认识。不过,本文篇幅有限,笔者肯定没有时间去考虑,需要进一步阅读官方开发文档,毕竟能力也有限。 bug 不是一个小问题,我是在 3 个月后才写这篇博客的。这是之前发过的,是微信小程序商城前端后端系列文章的第一篇,从我对微信小程序商城一无所知的时候开始。 但公司内部人员和项目突然变动,管理和项目陷入混乱。 再加上个人懒惰,写这篇博客就断断续续地推迟到了三个月后的今天。 这三个月来,发生了很多事情,我的精神状态也起起落落,所以才这么有趣。 让我们用李智的歌词来结束这篇博客吧。 不知道下一篇文章什么时候出,哈哈。 >我再也不会愚蠢地把自己交给过去了。 我的生活和我的思想距离现在已经有千里之遥了。

推荐教程:《微信小程序》

PHP快速学习视频免费教程(从入门到精通)

如何开始学习PHP?怎样才能快速学习PHP? 这里有简单的 PHP 学习教程(从初学者到专家)。 您可以保存并下载您想学习的朋友。

下载

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:小程序支付及退款流程详解(通过小程序订购的商品如何退款) https://zhujicankao.com/123630.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 小程序支付及退款流程详解(通过小程序订购的商品如何退款)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!