PS:本文旨在简单获取prepay_id,只是简单的介绍一下流程,并非完整的订单支付流程

小程序端JS代码:

  getxml(){var test = thiswx.getStorage({    //从缓存中获取用户的openidkey:'openid',success(res){console.log(res)test.setData({'openid':res.data})console.log(test.data.openid)}})wx.request({url: 'http://', //你的URl地址method:'POST',header:{'content-type':'application/x-www-form-urlencoded'},data:{'openid':test.data.openid,   //用户的opend'description':'0.38mm.pen',   //商品描述,此处为简单写了个例子,根据需要进行更改'total':1    //商品总金额,单位为分,根据需求可以进行乘100},success(res){console.log(res)}})}

PS:这些JS代码通过点击按钮进行触发的,再次重申,本篇文章仅仅只是介绍获取prepay_id的流程,以及本人在写代码过程中遇到的一些问题
PHP代码:

API_connect.php

<?php
require_once dirname(__DIR__) .'/getCurl/curlDock.php';class v2Connect
{/*** @param $URL :访问的API接口地址* @param $data :通过POST传递的数据,xml格式* @return bool|string :返回数据*/public function connect($URL,$data){$this->action = curl_init();curl_setopt($this->action, CURLOPT_URL, $URL);curl_setopt($this->action, CURLOPT_HEADER, 0);//curl_setopt($this->action, CURLOPT_HTTPHEADER, 0);curl_setopt($this->action, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($this->action, CURLOPT_SSL_VERIFYHOST, 0);curl_setopt($this->action, CURLOPT_RETURNTRANSFER, 1);curl_setopt($this->action, CURLOPT_CONNECTTIMEOUT, 60);curl_setopt($this->action, CURLOPT_POST, 1);curl_setopt($this->action, CURLOPT_POSTFIELDS, $data);$result = curl_exec($this->action);curl_close($this->action);return $result;}/*** @return string :返回随机字符串32位*/public function nonce_str(): string{$data = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';$disposeData = str_shuffle($data);return substr($disposeData,0, 32);}/*** @return string :返回商户订单号,非微信官方订单号*/public function out_trade_no(): string{$data = '1234567890';$disposeData = str_shuffle($data);$getData = substr($disposeData,5);return date('Ymd').time().$getData;}/*** @param $body :商品描述,与$description相同* @param $nonce_str :随机字符串32位* @param $openid :微信小程序用户身份唯一标识符* @param $out_trade_no :商品订单号,商家自行获取,并非微信官方订单号* @param $total_fee :订单总金额* @return string :返回签名,用于微信预支付订单*/public function getSign ($body,$nonce_str,$openid,$out_trade_no,$total_fee): string{$data = 'appid=wx9c2877c657b56ed9&body='.$body.'&mch_id=1528263341&nonce_str='.$nonce_str."&".'notify_url=http://001.chutest.xyz/index.php&openid='.$openid.'&out_trade_no='.$out_trade_no.'&spbill_create_ip=127.0.0.1&total_fee='.$total_fee.'&trade_type=JSAPI&key=dv0p6271okvpcawwbin61ht3ds8y6vs7';$sign = strtoupper(MD5($data));return $sign;}/*** @param $nonce_str :随机字符串32位* @param $sign  :签名,用于微信预支付订单* @param $description :商品描述* @param $openid :微信小程序用户身份唯一标识符* @param $out_trade_no :商品订单号,此为商户自行获取,并非微信官方订单号* @param $total :订单总金额* @throws DOMException*/public function request_body($nonce_str,$sign,$description,$openid,$out_trade_no,$total){$getConfig = new curlConnect;$request_data = new DOMDocument();$request_data -> formatOutput = true;$xml = $request_data -> createElement('xml');$appid = $request_data -> createElement('appid',$getConfig -> appid);$mch_id = $request_data -> createElement('mch_id',$getConfig -> mchID);$nonce_str = $request_data -> createElement('nonce_str',$nonce_str);$sign = $request_data -> createElement('sign',$sign);//$signType = $request_data -> createElement('sign_type','MD5');$description = $request_data -> createElement('body',$description);$openid = $request_data -> createElement('openid',$openid);$out_trade_no = $request_data -> createElement('out_trade_no',$out_trade_no);$total_fee = $request_data -> createElement('total_fee',$total);$spbill_creat_ip = $request_data -> createElement('spbill_create_ip','127.0.0.1');$notify_url = $request_data -> createElement('notify_url','http://001.chutest.xyz/index.php');$trade_type = $request_data -> createElement('trade_type','JSAPI');$request_data -> appendChild($xml);$xml -> appendChild($appid);$xml -> appendChild($mch_id);$xml -> appendChild($nonce_str);$xml -> appendChild($sign);//$xml -> appendChild($signType);$xml -> appendChild($description);$xml -> appendChild($openid);$xml -> appendChild($out_trade_no);$xml -> appendChild($total_fee);$xml -> appendChild($spbill_creat_ip);$xml -> appendChild($notify_url);$xml -> appendChild($trade_type);$request_data -> save('./xmlTest.xml');  //此处可以在同级目录下新建一个xmlTest.xml的文件用来看一下最后生成xml数据的样子}
}

PS:注意以上PHP代码中,request_body这一方法中的appid中的 i 是小写字母,若是将其写成大写字母 I 则会在之后的获取微信返回数据验证签名失败

下面是获取prepay_id处理微信返回数据的代码
getPrepay_id.php

<?php
require_once('./API_Connect.php');$openid = $_POST['openid'];
$body = $_POST['description'];
$total = $_POST['total'];
//$orderName = $_GET['orderName'];
$description = $body;
$total_fee = $total;//echo $openid;$getData = new v2Connect;$nonce_str = $getData->nonce_str();    //获取随机字符串$out_trade_no = $getData->out_trade_no();  //获取商家订单号$sign = $getData->getSign($body, $nonce_str, $openid, $out_trade_no, $total_fee);  //获取签名值$getData->request_body($nonce_str, $sign, $description, $openid, $out_trade_no, $total);  //获取请求数据的主体$data = file_get_contents('./xmlTest.xml');  //将主体内容存入变量
$URL = 'https://api.mch.weixin.qq.com/pay/unifiedorder';  //发起预支付的请求地址
$result = $getData->connect($URL, $data);   //接收预支付的prepay_id参数
file_put_contents('./result.xml', $result);   //将返回的数据存入文本$preData = file_get_contents('./result.xml');
$getPrepay = simplexml_load_string($preData);
$prepay_id = $getPrepay -> prepay_id;
echo $prepay_id;

以上代码就完成了获取prepay_id的过程

下面展示一下request_body生成的xml格式数据
xmlTest.xml

<?xml version="1.0"?>
<xml><appid>为了隐私,此处显示你的小程序的appid</appid><mch_id>为了隐私,此处显示你的微信支付商户号</mch_id><nonce_str>3KAERHLXTZBQ74VGO6YMJD2N01IUP5S9</nonce_str><sign>D178D6F5E3B841F976062E320217E04F</sign><body>0.38mm.pen</body><openid>为了隐私,此处我删掉了,此处显示获取到的用户的openid</openid><out_trade_no>20220721165837390737469</out_trade_no><total_fee>1</total_fee><spbill_create_ip>127.0.0.1</spbill_create_ip><notify_url>为了隐私,此处我删掉了,显示的是你的nitify_url微信订单通知的回调地址</notify_url><trade_type>JSAPI</trade_type>
</xml>

下面展示一下,微信返回的包含prepay_id的xml数据

<xml><return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<result_code><![CDATA[SUCCESS]]></result_code>
<mch_id><![CDATA[此处显示你的商户号]]></mch_id>
<appid><![CDATA[此处显示你的appid]]></appid>
<nonce_str><![CDATA[TU7vv4aOH2sJdxkj]]></nonce_str>
<sign><![CDATA[11A449D5E16CEB2B0423AE1EC6503E11]]></sign>
<prepay_id><![CDATA[返回的prepay_id]]></prepay_id>
<trade_type><![CDATA[JSAPI]]></trade_type>
</xml>

总之以上就是小程序微信支付获取prepay_id的流程,还是更推荐大家去仔细看一下微信支付开发者文档,里面写的流程还是很全面的,本篇文章仅供大家参考,文章有纰漏之处,欢迎指正.


本篇文章原创为CSDN用户:缱绻淡蓝海

PHP实现小程序微信支付V2获取prepay_id相关推荐

  1. PHP实现对小程序微信支付v2订单的结果查询

    PS:本篇文章用于获取微信支付订单的查询,代码中使用的是out_trade_no:商户订单号来进行查询,可以直接将文中的out_trade_no替换为transaction_id微信支付订单号来进行查 ...

  2. 调用支付jsapi缺少参数appid_服务商模式下的小程序微信支付

    最近,要做一个小程序商城的项目,需要在小程序中用到分账功能,也就是顾客购买商品支付的钱要给各个店铺,这就需要用到服务商模式. 在谈服务商模式下小程序微信支付之前,我们先要有一个服务商的商户号,这个商户 ...

  3. 小程序微信支付开发流程记录

    我所在公司需要开发一款商城小程序,里面需要用到微信支付,我负责里面的下单功能,从小程序端到后台的支付流程都是我自己开发的,由于我们组没有人有开发微信支付的经验,只有我有开发过JSAPI的微信支付的经验 ...

  4. nodejs实现小程序微信支付

    最近做小程序时用到了微信支付很是开心,因为之前支付一直都没有做过,终于又可以学点东西了.于是很开心的去看了下微信小程序的支付接口,没想到,事情基本都是后端做的,前端只要调用wx.requestPaym ...

  5. 移动支付开发:小程序微信支付开发测试

    小程序推出邀请测试已经有一个多月,终于申请到一个内部账号,尝试了一把小程序上的微信支付.小程序虽然叫"小",但是个人感觉他的门槛并不低.(/www.zhaoweb.cn) 教育小程 ...

  6. 微信小程序支付返回签名错误_java 微信小程序微信支付统一下订单及数字签名错误问题(后端)...

    今天来分享一下之前做微信小程序微信支付遇到的一些坑,博主这里是微信小程序支付功能,因此选择的微信支付方式是JSAPI支付方式(温馨提示左下角有音乐哦). 首先我们肯定是要在小程序后台绑定一个商户号的, ...

  7. tp小程序微信支付部分代码

    小程序微信支付开发指引:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml 流程图: <?php names ...

  8. PHP实现小程序微信支付v3版本退款,以及对退款订单进行查询

    PS:本篇文章仅用作对小程序微信支付v3版本的退款流程以及对退款订单进行查询的流程展示,如要用于实际,还请自行修改代码 文章中调用的API_Connect.php 与API_v3Connect.php ...

  9. 小程序微信支付申请与配置完整版操作流程

    小程序微信支付申请与配置完整版操作流程 一. 申请小程序微信支付 微信支付申请分为两种情况: 情况一,申请新的微信支付商户号: 情况二,绑定已有微信支付商户号 注意:申请微信支付的小程序账户需要进行微 ...

最新文章

  1. 最重要的会计期间是_非会计专业考生如何备考注会?难度多大?
  2. yum mysql mariadb 目录_CentOS用yum安装、配置MariaDB
  3. AngularJS模块——module
  4. php file_exists无效解决办法
  5. 使用angular4和asp.net core 2 web api做个练习项目(四)
  6. 互融云融资担保系统:助力企业解决融资难题
  7. jquery里判断数组内是否包含了指定的值或元素的方法
  8. 小程序调用API服务
  9. HART协议数据格式和消息结构的举例分析
  10. 迪普融合之路 构建价值网络
  11. 16行Python代码 批量采集 短视频音乐素材❤
  12. 2009最新QQ空间密码QQ相册密码破解
  13. 基于阿里云盘的文件分享系统
  14. 首先下载安装data.table包_首次揭秘“超级签”与企业包行业内幕!
  15. c++总结(updating)
  16. C语言中常见的%d,%c,%s,%x各代表什么
  17. iOS二维码生成及扫码
  18. 机器学习模型常用性能指标和Python代码实现
  19. CSS设置高度等于浏览器窗口
  20. 半个屁股和女人的胸脯

热门文章

  1. Oracle中的触发器
  2. 视频剪辑教程自学技巧:关于正确的短视频剪辑流程分享
  3. 51自学网php视频教程全集,51自学网免费PhotoShop视频教程全集
  4. 不写一行代码(一):实现安卓基于GPIO的LED设备驱动
  5. 秉火429笔记之七位带操作
  6. Reasoning with Sarcasm by Reading In-between读书笔记
  7. N70 (葵花宝典)
  8. Facebook的利润创下历史新高,不受最近的丑闻影响
  9. 计算机音乐遇见,遇见音乐 遇见爱作文
  10. 车道线检测方法的一些近期论文