APICloud集成微信支付(wxPay第二种方案)

article/2025/7/14 13:43:22

写在前面

我是先拿一个Demo测试的,然后再接入我们的app的,其中包名和应用签名必须实时更新,根据不同的app,即使相同的包名,应用签名是不同的,这点需要注意

评论里的一位小伙伴儿遇到问题后总结出的几个注意项在前面特别标注:(2018.7.14更新)

关于微信支付,需要特别注意,一定要仔细阅读微信的接口文档,虽然接口文档不尽人意,但是总体的功能还是满足的。不过有以下几点需要注意:

1.App支付时,在开放平台中,安卓的包名要与在web端打的包名一致,确保安卓可以正常付款。

2.nonce_str字段值,用一下格式:

String currTime = getCurrTime();

String strTime = currTime.substring(8, currTime.length());

String strRandom = buildRandom(4) + "";

String nonce_str = strTime + strRandom;

3.回调地址需要使用外网,可以是域名也可以是ip

4.App支付和H5支付的appid,appsecret,商户id,商户秘钥都以收到的邮件为准。

5.H5支付,需要在商户平台,js中做授权和网页中做授权。

6.公众号支付:需要在商户平台做appid申请,填写的appid为所需要关注的公众号的appid,申请之后,需要前往公众平台进行M-A授权。授权通过后才可以进行开发。接口文档中的appid需要填写公众号的appid。

其他遇到问题的小伙伴儿们敬请按照此文档逐一对比查漏补缺~

创建应用

开发者在使用APICloud提供的来自第三方开放平台-微信开放平台的相关模块时,需要开发者自行到微信开放平台申请相应的appId(urlScheme),并将该appId以feature的形式配置到您项目的config文件中。

该appId的申请与您应用的创建过程有关,具体流程请参考如下介绍。

  • 登录微信开放平台账号

访问微信开放平台,访问地址:https://open.weixin.qq.com

图片说明

  • 进入管理中心,若您未登录账号,微信开放平台将要求您登录:

图片说明

  • 完成登录即可,进入管理中心:

图片说明

  • 点击创建移动应用,进入应用基本信息填写界面:

图片说明

  • 填写完毕后下一步:

图片说明

  • 进入填写平台信息界面:

图片说明

  • 勾选iOS应用:

图片说明

  • 勾选Android应用:

图片说明

  • 必填信息获取:

获取应用包名:

Android平台的包名获取方式:

  • 登录到APICloud云端,如下图:

图片说明

  • 登录成功后进入应用概览界面,如下图:

图片说明

  • 获取包名。在应用概览区域点击应用简介下方的小箭头,在下拉的区域中即可查看到本应用的包名、appKey、申请百度apiKey所需的SHA1安全码码值(百度key)等信息。如下图红色圈区域:

图片说明

将该包名填入"勾选Android应用"一步中的应用包名即可

获取应用签名:

  • 进入微信开放平台资源中心界面,并点击展开资源下载下拉菜单:

图片说明

  • 选择Android资源下载:

图片说明

  • 在右侧的展开预览界面中选择下载“签名生成工具”。您将会下载得到一个应用安装包(apk文件):

图片说明

9.7、该应用将用于获取手机上已安装应用的签名。 将该apk安装至您的Android手机中。同时请确认该手机上已经安装了您需要获取签名信息的应用。 该apk安装后如图:

图片说明

  • 在输入框中输入,查看包名中获取的应用包名,如图:

图片说明

  • 点击Get Signature按钮即可,该工具将自动运算出此包名对应应用的签名,如下图中绿色字符:

图片说明

将该绿色字符串一次输入,勾选Android应用的应用签名框中即可。

  • 如过输入的包名对应的应用在本设备上不存在,则会出现类似以下情况:

图片说明

所以请确保您的手机上一定安装了相应的应用。

  • 输入完相关信息后,点击“提交审核”即可:

图片说明

图片说明

审核通过后即可在应用详情界面查看到你需要的appId。图片说明

开发者资质认证

需要微信登录,微信支付等高级功能,需要先进行开发者资质认证。

图片说明图片说明图片说明图片说明图片说明图片说明图片说明

开通微信支付

申请开通微信支付,需要先进行开发者资质认证。 APICloud 封装的wxPay模块、weiXin模块对应微信的APP支付。

视频教程: http://kf.qq.com/faq/140225MveaUz150107UVFNjy.html

文档攻略: http://kf.qq.com/faq/140225MveaUz151026EBNVBB.html

参考截图: 在管理中心 / 应用详情页面点击“申请开通”图片说明图片说明图片说明图片说明图片说明

一切准备工作做好,创建的app会有AppId和Secret已经应用签名和包名的信息。如图是我们应用的信息。


务必按照官方微信开放平台接入的文档(前面这些)一步步完成,

准备工作做完了,准备好几项数据: appidsecret(用于获取 access_token)、partnerkey(微信公众平台商户模块生成的商户密钥)。

我们使用wxPay的第二种支付方案,在模块内部处理签名过程。

在接入开始之前我们需要注意的是:检查APP是否使用模块pingppipayNow,因为会产生冲突,这两个模块是不能与wxPay同时添加的模块,所以需要先检查,以防所有的工作都做好了,云编译(测试需要云编译,不能使用自定义loader,因为key.xml文件的原因)的时候不好用!


准备接入:

1.在开发控制台添加wxPay的模块。

2.配置config.xml。

使用此模块之前需先配置 config.xml 文件,方法如下

  • 名称:wxPay
  • 参数:urlScheme、apiKey、apiSecret
  • 配置示例:
  <feature name="wxPay"><param name="urlScheme" value="wxd0d84bbf23b4a0e4"/><param name="apiKey" value="wxd0d84bbf23b4a0e4"/><param name="apiSecret" value="a354f72aa1b4c2b8eaad137ac81434cd"/></feature>
  • 字段描述:

    urlScheme:(必须配置)用于实现应用间跳转及数据交换,本应用可以启动微信客户端,也可以从微信客户端跳回本应用。urlScheme 的 value 值是从微信开放平台获取的 appid。appid 申请方法参考微信开放平台接入文档。

    apiKey:(必须配置)从微信开放平台获取的 appid,值与 urlScheme 相同。appid 申请方法参考微信开放平台接入文档。

    apiSecret:从微信开放平台获取的 secret。获取支付 token 需要配置此项。token 申请方法参考微信开放平台接入文档。

3.配置key.xml文件

key.xml 配置详解:

key.xml 文件(适用于支付方案二、支付方案一忽略本文件)需要放在 widget/res 文件目录下,格式如下:

<?xml version="1.0" encoding="UTF-8" ?>
<security><item name="wxPay_appId" value="wxd0d84bbf23b4a0e4"/><item name="wxPay_mchId" value="1234567890"/><item name="wxPay_partnerKey" value="***"/><item name="wxPay_notifyUrl" value="***"/><item name="其它服务需加密的参数配置 " value="***"/>...
</security>
  • 字段描述:

    wxPay_appId:在微信开发者平台创建应用生成的 appId

    wxPay_mchId:商户号,填写商户对应参数

    wxPay_partnerKey:商户API密钥,务必同在商户平台->账户设置->API安全里填写的密钥保持一致,此密钥是根据微信对商户密钥的规范自己生成的

    wxPay_notifyUrl:接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数

4.开始编写代码,wxPay方案二中主要使用的方法是config( 配置模块内部处理签名时需要的参数)和pay( 支付订单)方法。

但万年不变的是,首先我们需要调取我们的模块。然后走config的方法,在config方法回调成功的时候执行pay方法,调起微信客户端,执行微信支付的操作。

其中config方法因为我们在key.xml文件中处理了这些信息,所以我们在config里面不用写apiKey,mchId等这些信息。

在下面的示例代码中写了这几个参数,其实我们不需要在这里写的。

示例代码

var wxPay = api.require('wxPay');
wxPay.config({apiKey: '',mchId: '',partnerKey: '',notifyUrl: ''
}, function(ret, err) {if (ret.status) {alert('配置商户支付参数成功');} else {alert(err.code);}
});
在err.code中,有以下几种错误码对应的错误信息。我个人建议在alert的时候+上err.msg这样更清晰,毕竟错误码还需要去比对,建议将两者同时输出。

虽然我config上没有err但是在pay方法时候报错-1,我alert了err.msg之后才知道是mchId和AppId不匹配的原因,然后找到产生错误的原因解决,就避免了很多不必要的麻烦。

err:

  • 类型:JSON 对象
  • 内部字段:
{code: 1     //数字类型;错误码//-1(未知错误)//1(apiKey 值非法)//2(mchId 值非法)//3(partnerKey 值非法)//4(notifyUrl 值非法)
}
在执行config成功后,我们执行pay方法,同样的我要放上示例代码,独立出方法的代码只是为了让大家更好地理解。

其中要注意的是,在调用的时候,会自动填上下面的description等参数,这个地方有一个坑需要大家注意就是timeExpire,这个到期时间因为是2009年的时间所以会产生time_expire时间过短,刷卡至少1分钟,其他5分钟这样的错误提示。所以我建议大家留下前三个参数即可。

示例代码

var wxPay = api.require('wxPay');
wxPay.pay({description: 'iPad mini 16G 白色',totalFee: '888',tradeNo: '1217752501201407033233368018',spbillCreateIP: '196.168.1.1',deviceInfo: '013467007045764',detail: 'iPad mini 16G 白色',attach: '说明',feeType: 'CNY',timeStart: '20091225091010',timeExpire: '20091227091010',goodsTag: 'WXG',productId: '12235413214070356458058',openId: 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o'
}, function(ret, err) {if (ret.status) {alert(ret.result);} else {alert(err.code);}
});
其中这些参数的意义我就粘贴在下方给大家理解。

params

description:

  • 类型:字符串
  • 描述:商品或支付订单简要描述

totalFee:

  • 类型:字符串
  • 描述:订单总金额,只能为整数,单位:分(¥)

tradeNo:

  • 类型:字符串
  • 描述:商户系统内部的订单号,32个字符以内,可包含字母,其他说明见商户订单号

spbillCreateIP:

  • 类型:字符串
  • 描述:(可选项)APP 和网页支付提交用户端 IP,Native 支付填调用微信支付 API 的机器 IP
  • 默认值:196.168.1.1

deviceInfo:

  • 类型:字符串
  • 描述:(可选项)终端设备号(门店号或收银设备 ID),注意:PC 网页或公众号内支付请传 "WEB"

detail:

  • 类型:字符串
  • 描述:(可选项)商品名称明细列表

attach:

  • 类型:字符串
  • 描述:(可选项)附加数据,在查询 API 和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据

feeType:

  • 类型:字符串
  • 描述:(可选项)符合 ISO 4217标准的三位字母代码,其他值列表详见货币类型
  • 默认:CNY(人民币)

timeStart:

  • 类型:字符串
  • 描述:(可选项)订单生成时间,格式为 yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则

timeExpire:

  • 类型:字符串
  • 描述:(可选项)订单失效时间,格式为 yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则。注意:最短失效时间间隔必须大于5分钟

goodsTag:

  • 类型:字符串
  • 描述:(可选项)商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠

productId:

  • 类型:字符串
  • 描述:(可选项)trade_type=NATIVE ,此 id 为二维码中包含的商品 ID,商户自行定义,详见商户平台开发者文档

openId:

  • 类型:字符串
  • 描述:(可选项)trade_type=JSAPI ,用户在商户 appid 下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的 Openid
以及err的code和msg的详细解释:

err:

  • 类型:JSON 对象
  • 内部字段:(错误码详见统一下单错误码)
{code: 1       //数字类型;//错误码://-2(用户取消)//-1(可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等)//1(必传参数缺失)msg: 'NOAUTH' //字符串类型;//取值范围://NOAUTH (商户无此接口权限)//NOTENOUGH(余额不足)//ORDERPAID(商户订单已支付)//ORDERCLOSED(订单已关闭)//SYSTEMERROR(系统错误)//APPID_NOT_EXIST (APPID不存在)//MCHID_NOT_EXIST(MCHID不存在)//APPID_MCHID_NOT_MATCH(appid和mch_id不匹配)//LACK_PARAMS(缺少参数)//OUT_TRADE_NO_USED(商户订单号重复)//SIGNERROR (签名错误)//XML_FORMAT_ERROR(XML格式错误)//REQUIRE_POST_METHOD(请使用post方法)//POST_DATA_EMPTY(post数据为空)//NOT_UTF8(编码格式错误)
}
到此我们的详细解释基本完成,接下来我会粘贴我的具体实现代码,这里需要 注意的是每个订单号tradeNo只能使用一次:

function wxPay() {var wxPay = api.require('wxPay');wxPay.config({}, function(ret, err) {if (ret.status) {alert('配置商户支付参数成功');wxPay.pay({description: 'iPad mini 16G 白色',totalFee: '001',tradeNo: '1217752501201407033233368012',},function(ret,err){//coding...if(ret.status) {alert("您已支付成功");} else {if(err.code == '-2'){alert("您已取消支付");} else {alert('回调失败'+err.code+err.msg);}	}});} else {console.log(err.code);}});}

如我的代码所显示的一样,当config回调成功走了pay方法调起微信客户端执行支付操作,会弹出有支付信息的窗口,


点击立即支付,ret支付成功,取消支付则err.code=-2。


到这里,微信支付的接入基本完成。


自己研究的如果有错误烦请读者指出,谢谢!


http://chatgpt.dhexx.cn/article/ciq0doF8.shtml

相关文章

Google Play 支付集成

官方文档&#xff1a; https://developer.android.com/google/play/billing 代码按照官网集成就可以&#xff0c;很清楚&#xff0c;下面主要记录控制台的配置。 1.先商品 -> 应用内商品&#xff0c;先上传APK后再添加商品&#xff1a; 2. 创建商品&#xff1a; 3. 启用&a…

集成Google Play支付

前言 这篇文章很早就想写了&#xff0c;由于时间关系一直拖到现在&#xff0c;我相信这篇文章对大多数想要接入Goole Play支付的小伙伴来说&#xff0c;会少走许多坑的&#xff0c;在这里说明一下&#xff0c;笔者在集成过程中踩了不少坑&#xff0c;所有请大家尽情享用成果&a…

聚合支付-x-pay

X-Pay X-Pay是一款集合聚合支付、应用管理、商品管理、收银台、订单中心、财务开票、消息中心等功能模块.平台优势 适用于企业实现聚合支付需求。多个产品线同用一套支付系统&#xff0c;从业务和架构上实现解耦。平台亮点 统一管理多个产品线上售卖不同商品,统一个收银台,统一…

微信支付的服务商模式V3支付(可直接使用)

直连商户模式和服务商模式区别&#xff1a; 直连商户&#xff1a;例如张三开了一个小程序&#xff0c;然后别人在这个小程序买东西&#xff0c;结账的时候&#xff0c;钱是直接打到张三的账号上的。 服务商模式&#xff1a;例如张三开了一个小程序&#xff0c;然后这个小程序中…

如何发布到NPM上(转)

简要:这篇文章介绍了如何讲自己的包发布到NPM上&#xff0c;马克一下&#xff0c;将来有用 。。。 npm包发布 发布npm包&#xff0c;更方便以后下载使用。 我们已经把插件代码上传到github上面了&#xff0c;那么我们是否可以也做成一个npm包发布到npm上呢&#xff1f;答案是肯…

微信支付APIv3

文章目录 微信支付之前我的密钥啥的都是放到配置文件里面以后可以再写一个文件基础支付APIv3介绍获取验签和HttpClientAPIv3证书与密钥使用说明 微信支付的SDK工具Native支付流程我们程序运行时的日志也可以使用log.debug在方法堆栈里面查看我们程序执行的方法调用顺序内网穿透…

你了解过区块链的最新模式都有哪些呢?

热门项目 ①USDT跑分系统: 项目热度:***** 项目亮点: 1.使用全球主流稳定的结果货币USDT。 2.通道永不被封,资金永不被冻。 3.个人与个人之间的C2C点对点分散式交易。 4.高效,5分钟内迅速到账。 项目玩法: 500个usdt以上即可开启接单(相当于押金),静态跑一轮可得…

vpay平台模式开发 15天交付系统

近期迅速走进大家视野的Vpay是什么究竟是什么&#xff0c;有人说vpay是一个APP&#xff0c;有人说&#xff0c;是一个支付手段&#xff0c;接近一点的会说是一个模式&#xff0c;那究竟是什么模式?拆分?还是虚拟币?其实严谨来讲Vpay是 重新构建了连接方式&#xff0c;连接方…

vpay软件系统开发

“创新性强、前瞻性高&#xff0c;需要先行先试&#xff0c;但切忌‘一刀切’&#xff08;陈琦&#xff1a;138-2848-7919可微&#xff09;当天&#xff0c;互联网医疗企业丁香园创始人、董事长李天天在接受央视《新闻11》采访时表达了这样的观点&#xff0c;近两年的互联网圈子…

vpay模式软件开发 vpay系统

vpan它一方面通过数学和算法实现了全网的共识与信任(协议属性)&#xff0c;另一方面通过代币保证了生态体系的价值激励(货币属性)。 区块链适合应用的领域是已经现存大量结构化数据&#xff0c;或者是容易形成结构化数据的领域。这点比较类似ai&#xff0c;只有数据线上化结构化…

V免签-PC监控端 Vpay监控 PC 4.3

V免签-PC监控端 介绍 V免签pc监控端更新界面 支持微信、支付宝双端监听 使用说明 下载软件配置域名、密钥 版本更新 持续更新中~~~ 下载地址&#xff1a;https://wwsl.lanzoul.com/iSSo30vzqm1g https://www.159e.cn/75.html Vpay监控 4.3 更新日志&#xff1a; 1.修复…

Vpay是什么?Vpay怎么玩?用Vpay有什么好处?Vpay系统开发

&#xff08;1&#xff09;Vpay是什么&#xff1f; Vpay是一个全面开放的完全去中心化的网络支付平台&#xff0c;跟支付宝和微信一样&#xff0c;不同的是&#xff0c;Vpay是基于区块链技术开发的&#xff0c;用户之间能顺利实现点对点交易&#xff0c;支付&#xff0c;跨境转…

web前端第二周学习

第二周学习 二十一、嵌套列表二十二、表格标签二十三、表格属性二十四、表单标签二十五、表单相关标签二十六、表格表单组合使用二十七、div与span二十八、CSS语法格式二十九、内联样式与内部样式三十、外部样式及两种写法三十一、CSS颜色表示法三十二、背景样式三十三、背景实…

小程序与云开发实战 36 讲

课程介绍 小程序依托微信超过 10 亿的海量用户&#xff0c;它无需安装即可使用的完美用户体验&#xff0c;已经成为商家竞相争夺的大蛋糕&#xff0c;同时&#xff0c;小程序开发快速、容易部署广受程序员的喜爱&#xff0c;作为程序员的我们&#xff0c;还有什么理由不学习小…

WEB3.0白皮书

I // Part1 新浪潮 // 那么 Web3.0 究竟是什么? TA 能给当今世界带来什么变化? TA 由哪 些技术组成? 如何实现 Web3.0? TA 能带来哪些机会? 我们能从中得到什么? Web3.0 是一个非常前沿的话题&#xff0c;充满了不确定性&#xff0c;也没有任何人能准确预测…

如何在 2021 年使用 WordPress 制作游戏网站

您想学习如何使用 WordPress 制作游戏网站吗&#xff1f; 游戏从未如此流行。拥有自己的游戏网站&#xff0c;您可以创建一个游戏社区&#xff0c;创建一个受欢迎的游戏博客&#xff0c;甚至赚取副业收入。 在本文中&#xff0c;我们将向您展示如何在没有任何技术技能的情况下…

第一批 00 后 Web3 创业者,和他们的「人间清醒」

当不少 80 后、90 后还在困惑&#xff0c;生怕赶不上这趟所谓的 Web3「革命快车」的时候&#xff0c;有一些 00 后早已「玩得飞起」。一位 00 后朋友说&#xff0c;「你们眼中的革命&#xff0c;是我生活的日常。」 然而&#xff0c;这个新赛道有的不止是「狂热」&#xff0c;…

小甲鱼零基础入门学习python笔记

小甲鱼老师零基础入门学习Python全套资料百度云(包括小甲鱼零基础入门学习Python全套视频全套源码全套PPT课件全套课后题及Python常用工具包链接、电子书籍等&#xff09;请往我的资源&#xff08;https://download.csdn.net/download/qq_32809093/13099592&#xff09;查看 目…

web前端学习1-45集

web前端1-45集 第一集 课程划分1.HTMLCSS系列教程1之拨云见日2.HTMLCSS系列教程2之溯本求源3.HTMLCSS系列教程3之风声水起4.HTMLCSS系列教程4之巧夺天工如何学好web前端 第二集 拨云见日1. 什么是HTML、CSS&#xff1a;2. 代码跟网站的关系&#xff1a;3.写到哪里&#xff1a;4…

应用服务器语言,web服务器 语言

C语言进行CGI程序设计 也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理,将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。CGI程序可以用... 文章 技术让梦想更伟大-李肖遥 20…