当前位置:首页 > 编程技术 > 正文内容

微信小程序 wx.requestPayment({}) 唤起微信支付

yc8882年前 (2023-01-15)编程技术309

1. 登录商户平台,将商户和小程序进行关联


产品中心 中的 APPID账号管理 中,添加关联的小程序 appid

2. 小程序调起支付API


小程序调起支付API:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5

小程序API开发文档:https://developers.weixin.qq.com/miniprogram/dev/api/api-pay.html#wxrequestpaymentobject

3. 封装类


  1. <?php
  2. class Wechat
  3. {
  4. // 公众号的或者小程序支付参数
  5. private $appId = "wx5117bexxxxxx";
  6. private $appSecret = "136ae3xxxxxxx";
  7. // 微信商户号
  8. private $mch_id = "15xxxx";
  9. private $mch_key = "xxxasdfghjkxxxxxx";
  10. // 回调地址
  11. public $notify_url = '';
  12. // 退款回掉地址
  13. public $refund_notify_url = '';
  14. private $request;
  15. private $nonce_str;
  16. public function __construct()
  17. {
  18. $this->request = request();
  19. $this->notify_url = 'notice.php';
  20. $this->refund_notify_url = 'refund.php';
  21. $this->nonce_str = md5(date('YmdHis') . time() . rand(1000, 9999));
  22. }
  23. //小程序登录
  24. /**
  25. * @param $code 获取微信支付的登录code
  26. * @return mixed
  27. */
  28. public function wxLogin($code)
  29. {
  30. $url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $this->appId . "&secret=" . $this->appSecret . "&js_code=" . $code . "&grant_type=authorization_code";
  31. return json_decode($this->execute($url), true);
  32. }
  33. /**
  34. * @param $out_trade_no 微信支付唯一订单
  35. * @param $openid 微信支付用户的openid
  36. * @param $price 订单支付的价格,(单位,元)
  37. * @param string $desc 订单描述
  38. * @return array|mixed 组装支付参数
  39. */
  40. public function getPayParameter($out_trade_no, $openid, $price, $desc = '')
  41. {
  42. header("Content-type:text/html;charset=utf-8"); //此处进行字符集初始化,
  43. $data = [
  44. 'appid' => $this->appId,
  45. 'body' => $desc,
  46. 'mch_id' => $this->mch_id,
  47. 'nonce_str' => $this->nonce_str,// 随机字符串
  48. 'notify_url' => $this->notify_url,//异步回调地址
  49. 'openid' => $openid,//用户登录时获取的code中含有的值
  50. 'out_trade_no' => $out_trade_no,//商家订单号
  51. 'spbill_create_ip' => $this->get_real_ip(),//APP和网页支付提交用户端ip
  52. 'total_fee' => $price * 100,//订单总额,单位:分
  53. 'attach' => 'order',//确定是哪个商家进行的支付
  54. 'trade_type' => 'JSAPI'//交易类型
  55. ];
  56. //将数组转化为Xml
  57. $data['sign'] = $this->makeSign($data);
  58. $abc_xml = $this->arrayToXml($data);
  59. //统一下单接口prepay_id
  60. $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
  61. $xml = $this->execute($url, $abc_xml, 1);
  62. //将XMl转化为数组
  63. $info = $this->xml2array($xml);
  64. if (!isset($info['prepay_id'])) {
  65. return $info;
  66. }
  67. $params = array(
  68. 'appId' => $this->appId,
  69. 'nonceStr' => $data['nonce_str'],
  70. 'package' => 'prepay_id=' . $info['prepay_id'],
  71. 'signType' => 'MD5',
  72. 'timeStamp' => '' . time(),
  73. );
  74. $_info['paySign'] = $this->makeSign($params);
  75. $_info['timeStamp'] = "" . $params['timeStamp'];
  76. $_info['nonceStr'] = $params['nonceStr'];
  77. $_info['package'] = $params['package'];
  78. $_info['signType'] = $params['signType'];
  79. $_info['notify_url'] = $this->notify_url;
  80. // 请求成功后进行返回数据信息
  81. if ($info['return_code'] == 'SUCCESS' || $info['result_code'] == 'SUCCESS') {
  82. return $_info;
  83. } else {
  84. return [];
  85. }
  86. }
  87. /**
  88. * @param $openid 支付的用户的openid
  89. * @return mixed
  90. */
  91. public function userInfo($openid)
  92. {
  93. $token = $this->getWxAccessToken();
  94. $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" . $token . "&openid=$openid&lang=zh_CN";
  95. return json_decode($this->execute($url), true);
  96. }
  97. //获取微信的token
  98. public function getWxAccessToken()
  99. {
  100. $key = $this->appId . 'miniProgram_access_token';
  101. $accessToken = <

本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10384.html

标签: 软件编程
分享给朋友:

“微信小程序 wx.requestPayment({}) 唤起微信支付” 的相关文章

【说站】laravel实现自定义404页面并给页面传值

【说站】laravel实现自定义404页面并给页面传值

以 laravel5.8 为例,虽然有自带的404页面,但太简单,我们更希望能自定义404页面,将用户留在站点。实现的方式很简单,将自定义的视图文件命名为 404.blade.php,并放到 reso...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

今天在安装MySQL时出现starting the server失败,经过查询分析得出以下结论,记录一下操作步骤。原因分析:如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。star...

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状;该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线。下面,通过C#程序代码介绍如何...

【说站】使用systemctl配置dnspod-shell实现ddns

【说站】使用systemctl配置dnspod-shell实现ddns

这个是毛子路由器上用的脚本,由于碳云的nat服务器公网IP不断的变,因此只好通过ddns来稳定连接nat服务器了。顺便水一篇文章,大家新年快乐。使用前需要将域名添加到 DNSPod 中,并添加一条A记...