php android 微信支付,Android_Android实现微信支付功能,开发Android APP微信支付功能, - phpStudy...
Android实现微信支付功能
开发Android APP微信支付功能,需要完成三个步骤:第一步生成预支付订单、第二步生成微信支付参数、第三步调起微信APP支付。除了需要审核通过的APP应用外,还需要获得微信支付接口权限,然后获取对应的商户号、API密钥,这两者缺一不可,并且在APP微信支付中使用
获得商户号、API密钥
在微信开放平台中查看审核通过的APP应用,是否申请支付功能,若已申请,登录微信支付|商户平台:http://pay.weixin.qq.com 查看对应的商户号、API密钥
》申请微信支付接口
》登录商户平台
》查看商户号
》获取API密钥
第一步:生成预支付订单
将商品信息、商户信息使用BasicNameValuePair存放,然后存储在List列表中,并构造成xml字符串格式,以POST方式微信提供的接口:https://api.mch.weixin.qq.com/pay/unifiedorder发送数据,接收返回信息,获取prepay_id预支付订单编号
》生成订单请求
private String genProductArgs() {
StringBuffer xml = new StringBuffer();
try {
String nonceStr = genNonceStr();
xml.append("");
List packageParams = new LinkedList();
packageParams
.add(new BasicNameValuePair("appid", Constants.APP_ID));
packageParams.add(new BasicNameValuePair("body", "weixin"));
packageParams
.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));
packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));
packageParams.add(new BasicNameValuePair("notify_url",
"http://121.40.35.3/test"));
packageParams.add(new BasicNameValuePair("out_trade_no",
genOutTradNo()));
packageParams.add(new BasicNameValuePair("spbill_create_ip",
"127.0.0.1"));
packageParams.add(new BasicNameValuePair("total_fee", "1"));
packageParams.add(new BasicNameValuePair("trade_type", "APP"));
String sign = genPackageSign(packageParams);
packageParams.add(new BasicNameValuePair("sign", sign));
String xmlstring = toXml(packageParams);
return xmlstring;
} catch (Exception e) {
Log.e(TAG, "genProductArgs fail, ex = " + e.getMessage());
return null;
}
}
》获取预支付订单编号
String url = String.format("https://api.mch.weixin.qq.com/pay/unifiedorder");
String entity = genProductArgs();
Log.e("orion", entity);
byte[] buf = Util.httpPost(url, entity);
String content = new String(buf);
Log.e("orion", content);
Map xml = decodeXml(content);
第二步:生成微信支付参数
appId对应APP应用的APPID,partnerId对应商户号,prepayId对应第一步获得的预支付订单,packageValue取值Sign=WXPay,nonceStr是一串随机数,timeStamp生成的时间戳,sign对应APP签名
》支付参数配置
private void genPayReq() {
req.appId = Constants.APP_ID;
req.partnerId = Constants.MCH_ID;
req.prepayId = resultunifiedorder.get("prepay_id");
req.packageValue = "Sign=WXPay";
req.nonceStr = genNonceStr();
req.timeStamp = String.valueOf(genTimeStamp());
List signParams = new LinkedList();
signParams.add(new BasicNameValuePair("appid", req.appId));
signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));
signParams.add(new BasicNameValuePair("package", req.packageValue));
signParams.add(new BasicNameValuePair("partnerid", req.partnerId));
signParams.add(new BasicNameValuePair("prepayid", req.prepayId));
signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));
req.sign = genAppSign(signParams);
sb.append("sign\n" + req.sign + "\n\n");
show.setText(sb.toString());
Log.e("orion", signParams.toString());
}
》nonceStr随机数
private String genNonceStr() {
Random random = new Random();
return MD5.getMessageDigest(String.valueOf(random.nextInt(10000))
.getBytes());
}
》timeStamp时间戳
private long genTimeStamp() {
return System.currentTimeMillis() / 1000;
}
》APP签名
private String genAppSign(List params) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < params.size(); i++) {
sb.append(params.get(i).getName());
sb.append('=');
sb.append(params.get(i).getValue());
sb.append('&');
}
sb.append("key=");
sb.append(Constants.API_KEY);
this.sb.append("sign str\n" + sb.toString() + "\n\n");
String appSign = MD5.getMessageDigest(sb.toString().getBytes())
.toUpperCase();
Log.e("orion", appSign);
return appSign;
}
第三步:调起微信APP支付
支付之前,需要手机安装微信客户端,如果没有,会提示下载安装微信,然后再调起支付,在AndroidManifest.xml文件中添加如下配置
android:name=".act.PayActivity"
android:exported="true"
android:launchMode="singleTop" >
》调起微信支付
private void sendPayReq() {
msgApi.registerApp(Constants.APP_ID);
msgApi.sendReq(req);
}
接收微信返回结果
在实现了IWXAPIEventHandler接口的Activity中重写onResp(BaseResp)方法,接收微信结果
》接收支付结果
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.app_tip);
builder.setMessage(getString(R.string.pay_result_callback_msg,
resp.errStr + ";code=" + String.valueOf(resp.errCode)));
builder.show();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。相关阅读:
如何编写高质量JS代码
Win10对比Win7哪个好 到底谁更快?
详谈java集合框架
php自定义hash函数实例
Win10 Mobile预览版10536部分修复内容汇总
JavaScript学习笔记之数组的增、删、改、查
Ajax实现文件下载
文字垂直滚动之javascript代码
Android实现树形层级ListView
Ubuntu修复There is no command installed for 7-zip archive files错误
Js使用WScript.Shell对象执行.bat文件和cmd命令
JS实现带鼠标效果的头像及文章列表代码
完美解决AJAX跨域问题
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
php android 微信支付,Android_Android实现微信支付功能,开发Android APP微信支付功能, - phpStudy...相关推荐
- SpringBoot对接微信小程序支付功能开发(一,下单功能)
1,接入前准备: 接入模式选择直连模式: 申请小程序,得到APPID,并开通微信支付: 申请微信商户号,得到mchid,并绑定APPID: 配置商户API key,下载并配置商户证书,根据微信官方文档 ...
- SpringBoot对接微信小程序支付功能开发(二,支付回调功能)
接着上一篇: SpringBoot对接微信小程序支付功能开发(一,下单功能) 在上一篇下单功能中我们有传支付结果回调地址. 下面是回调接口实现 package com.office.miniapp.c ...
- 云炬Android开发笔记 13购物车,订单,支付功能开发(包含支付宝支付和微信支付)
阅读目录 1.购物车UI编写 1.1 购物车布局 1.2 recycleView中的item的布局 2. 购物车数据结构分析.解析与转化 2.1 解析的数据 2.2 数据的转化 2.3 数据适配器的 ...
- 【微信支付】(亲测可用)对接app微信支付V2版本 后端代码示例
业务场景:基本上做业务的话,也是逃不开对接各种支付接口的,比如数字人民币支付.农行免密支付.支付宝支付.微信支付等等.在着手开发时候,也是遇到不少阻力,微信官方提供的接口文档很散乱,如果之前没接触过, ...
- web前端学习(三):微信小程序基于H5规范,开发Android应用程序
前言: 微信小程序开发框架的目标是通过尽可能简单,高效的方式让开发者可以在微信中开发具有原生APP体验的服务. 整个小程序框架系统分为两部分,逻辑层,视图层,小程序提供了自己的视图层描述语言, WXM ...
- 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作示范...
腾讯云副总裁刘颖将腾讯云定义为微信的一个助手,腾讯云面向微信生态开发者输出的技术解决方案包括"小程序·云开发".小程序音视频直播.小游戏联机对战引擎等,腾讯云与企业微信的合作也会在 ...
- 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作了示范...
腾讯云副总裁刘颖将腾讯云定义为微信的一个助手,腾讯云面向微信生态开发者输出的技术解决方案包括"小程序·云开发".小程序音视频直播.小游戏联机对战引擎等,腾讯云与企业微信的合作也会在 ...
- Android入门教程五之使用AndroidStudio+SDK开发安卓APP
<!-- Android 基础入门教程 end --><div class="col middle-column big-middle-column">&l ...
- android签到功能开发,Android简单实现app每月签到功能
本文实例为大家分享了Android实现app每月签到功能的具体代码,供大家参考,具体内容如下 先上一张效果图: 其中这些签到的效果图是在网上找的,然后重要用到的控件就是 GridvVew 了, 代码很 ...
- s6 edge编译android,三星在为S6和S6 edge开发Android 5.1升级包
(文心)与许多竞争对手一样,最近数周和数月以来,三星一直在逐步为旗下高端Android设备发布Lollipop升级包.但与竞争对手一样,三星的Lollipop升级包一直以Android 5.0.x为主 ...
最新文章
- 软件测试实验--数据工厂DataFactory+MySQL数据构造
- Visual Studio进行Web性能测试- Part III
- 数据迁移方法之expdp
- 大家注意:升级 win8.1 火狐浏览器 谷歌浏览器 搜狗五笔输入法 都不能用啦
- WPF 路径动画PathAnimations的使用
- java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)
- React开发中常用的工具集锦
- 线性存储(链表存储)
- javascript Event对象
- python源_python更换国内源
- golang websocket 聊天室demo
- Visual Studio 代码风格约束
- li ul vue 滚动显示_vue ul循环滚动的问题
- Spring 注解中@Resource 和 Authwired 的区别
- 《Nature》论文插图的Matlab复刻第4期—单组多色柱状图(Part2-82)
- 【图文测评】小智的服务器亲测
- 京东商品详情数据接口(APP端,H5端),实时了解商品价格走势,接口代码教程
- Win11找不到显卡控制面板怎么办?
- WCF基础教程(三)——WCF通信过程及配置文件解析
- 【室内定位】常用的机器人定位导航技术及优缺点
热门文章
- 怎样健康喝水 这样喝水有助我们的健康
- 2020牛客暑期多校训练营(第八场)	Enigmatic Partition
- 小程序猜明星小游戏实现方法
- 【UE4 第一人称射击游戏】22-拾取弹药
- 保姆级使用PyTorch训练与评估自己的MobileNetV2网络教程
- html5上一个版本是什么意思,H5是什么意思?H5是怎么发展来的?
- eacharts和eacharts-gl、3d饼图、3d柱状图加折线图、下载gl报错解决
- oracle数据库中_以下undo和redo说法错误的是,[案例]Oracle报错ORA-01157 ORA-01110 12C数据库undo异常恢复...
- 如何正确使用计算机提纲,计算机系统操作论文大纲格式 计算机系统操作论文提纲如何写...
- 2023兔年凯立德车载导航最新版