阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 2659|回复: 0

小程序服务端集成微信支付

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126156
QQ
发表于 2017-1-9 19:31:07 | 显示全部楼层 |阅读模式
摘要: 换取openid->统一下单->发起支付,三步走,其中二次签名比较坑人。
该demo源码已托管到码云:http://git.oschina.net/dotton/lendoo-wx,欢迎下载。
理论上集成微信支付的全部工作可以在小程序端完成,因为小程序js有访问网络的能力,但是为了安全,不暴露敏感key,也更好地跨平台(对于iOS与Android原生APP开发来说,哪天小程序的支付接口也纳入了开放平台了,这条也就成立了),而且可以使用官方提供的现成php demo更省力,于是在服务端完成签名与发起请求,小程序端只做一个wx.requestPayment(OBJECT)接口的对接。
整体集成过程与JSAPI、APP类似,先统一下单,然后拿返回的结果来请求支付。
一共三步:
1.小程序端通过wx.login的返回的code换取openid
2.服务端向微信统一下单
3.小程序端发起支付
事先准备好这几样东西:
  1. APPID = 'wx426b3015555a46be';
  2. MCHID = '1900009851';
  3. KEY = '8934e7d15453e97507ef794cf7b0519d';
  4. APPSECRET = '7813490da6f1265e4901ffb80afaa36f';
复制代码

PHP SDK,下载链接见文尾

第1、4样是申请小程序时获得的,第2、3样是申请开通微信支付时获得的,注意第3、4样长得比较像,其实是2个东西,两者混淆将导致签名通不过

向微信端下单,得到prepay_id

1. 创建一个Controller,引并WxPay.Api.php类
  1. <?php
  2. require_once __DIR__ . '/BaseController.php';
  3. require_once __DIR__ . '/../third_party/wxpay/WxPay.Api.php';

  4. class WXPay extends BaseController {
  5.     function index() {
  6.     }
  7. }
复制代码

之后可以通过index.php/wxpay来作访问请求

2. 修改配置文件WxPay.Config.php

改成自己申请得到相应key

3. 实现index方法
  1.        function index() {
  2. //         初始化值对象
  3.         $input = new WxPayUnifiedOrder();
  4. //         文档提及的参数规范:商家名称-销售商品类目
  5.         $input->SetBody("灵动商城-手机");
  6. //         订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
  7.         $input->SetOut_trade_no('123123123');
  8. //         费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱
  9.         $input->SetTotal_fee("1");
  10.         $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
  11.         $input->SetTrade_type("JSAPI");
  12. //         由小程序端传给服务端
  13.         $input->SetOpenid($this->input->post('openId'));
  14. //         向微信统一下单,并返回order,它是一个array数组
  15.         $order = WxPayApi::unifiedOrder($input);
  16. //         json化返回给小程序端
  17.         header("Content-Type: application/json");
  18.         echo json_encode($order);
  19.     }
复制代码

说明1:文档上提到的nonce_str不是没提交,而是sdk帮我们填上的

出处在WxPay.Api.php第55行


  1. $inputObj->SetNonce_str(self::getNonceStr());//随机字符串
复制代码
说明2:sign也已经好心地给setSign了,出处在WxPay.Data.php第111行,MakeSign()中
  1.     /**
  2.      * 生成签名
  3.      * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
  4.      */
  5.     public function MakeSign()
  6.     {
  7.         //签名步骤一:按字典序排序参数
  8.         ksort($this->values);
  9.         $string = $this->ToUrlParams();
  10.         //签名步骤二:在string后加入KEY
  11.         $string = $string . "&key=".WxPayConfig::KEY;
  12.         //签名步骤三:MD5加密
  13.         $string = md5($string);
  14.         //签名步骤四:所有字符转为大写
  15.         $result = strtoupper($string);
  16.         return $result;
  17.     }
复制代码
4. 小程序内调用登录接口,获取openid

向微信登录请求,拿到code,再将code提交换取openId

  1. wx.login({
  2.           success: function(res) {
  3.             if (res.code) {
  4.               //发起网络请求
  5.               wx.request({
  6.                 url: 'https://api.weixin.qq.com/sns/jscode2session?appid=wx9114b997bd86f***&secret=d27551c7803cf16015e536b192******&js_code='+res.code+'&grant_type=authorization_code',
  7.                 data: {
  8.                   code: res.code
  9.                 },
  10.                 success: function (response) {
  11.                     console.log(response);
  12.                 }
  13.               })
  14.             } else {
  15.               console.log('获取用户登录态失败!' + res.errMsg)
  16.             }
  17.           }
  18.         });
复制代码

从控制台看到已经成功拿到openid,剩下的事情就是将它传到服务端就好了,服务端那边$this->input->post('openId')等着收呢。


更多内容阅读原文:
https://my.oschina.net/huangxiujie/blog/817654?from=20170108




。。

捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-4-20 08:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表