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...相关推荐

  1. SpringBoot对接微信小程序支付功能开发(一,下单功能)

    1,接入前准备: 接入模式选择直连模式: 申请小程序,得到APPID,并开通微信支付: 申请微信商户号,得到mchid,并绑定APPID: 配置商户API key,下载并配置商户证书,根据微信官方文档 ...

  2. SpringBoot对接微信小程序支付功能开发(二,支付回调功能)

    接着上一篇: SpringBoot对接微信小程序支付功能开发(一,下单功能) 在上一篇下单功能中我们有传支付结果回调地址. 下面是回调接口实现 package com.office.miniapp.c ...

  3. 云炬Android开发笔记 13购物车,订单,支付功能开发(包含支付宝支付和微信支付)

    阅读目录 1.购物车UI编写 1.1 购物车布局  1.2 recycleView中的item的布局 2. 购物车数据结构分析.解析与转化 2.1 解析的数据 2.2 数据的转化 2.3 数据适配器的 ...

  4. 【微信支付】(亲测可用)对接app微信支付V2版本 后端代码示例

    业务场景:基本上做业务的话,也是逃不开对接各种支付接口的,比如数字人民币支付.农行免密支付.支付宝支付.微信支付等等.在着手开发时候,也是遇到不少阻力,微信官方提供的接口文档很散乱,如果之前没接触过, ...

  5. web前端学习(三):微信小程序基于H5规范,开发Android应用程序

    前言: 微信小程序开发框架的目标是通过尽可能简单,高效的方式让开发者可以在微信中开发具有原生APP体验的服务. 整个小程序框架系统分为两部分,逻辑层,视图层,小程序提供了自己的视图层描述语言, WXM ...

  6. 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作示范...

    腾讯云副总裁刘颖将腾讯云定义为微信的一个助手,腾讯云面向微信生态开发者输出的技术解决方案包括"小程序·云开发".小程序音视频直播.小游戏联机对战引擎等,腾讯云与企业微信的合作也会在 ...

  7. 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作了示范...

    腾讯云副总裁刘颖将腾讯云定义为微信的一个助手,腾讯云面向微信生态开发者输出的技术解决方案包括"小程序·云开发".小程序音视频直播.小游戏联机对战引擎等,腾讯云与企业微信的合作也会在 ...

  8. Android入门教程五之使用AndroidStudio+SDK开发安卓APP

    <!-- Android 基础入门教程 end --><div class="col middle-column big-middle-column">&l ...

  9. android签到功能开发,Android简单实现app每月签到功能

    本文实例为大家分享了Android实现app每月签到功能的具体代码,供大家参考,具体内容如下 先上一张效果图: 其中这些签到的效果图是在网上找的,然后重要用到的控件就是 GridvVew 了, 代码很 ...

  10. s6 edge编译android,三星在为S6和S6 edge开发Android 5.1升级包

    (文心)与许多竞争对手一样,最近数周和数月以来,三星一直在逐步为旗下高端Android设备发布Lollipop升级包.但与竞争对手一样,三星的Lollipop升级包一直以Android 5.0.x为主 ...

最新文章

  1. 软件测试实验--数据工厂DataFactory+MySQL数据构造
  2. Visual Studio进行Web性能测试- Part III
  3. 数据迁移方法之expdp
  4. 大家注意:升级 win8.1 火狐浏览器 谷歌浏览器 搜狗五笔输入法 都不能用啦
  5. WPF 路径动画PathAnimations的使用
  6. java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)
  7. React开发中常用的工具集锦
  8. 线性存储(链表存储)
  9. javascript Event对象
  10. python源_python更换国内源
  11. golang websocket 聊天室demo
  12. Visual Studio 代码风格约束
  13. li ul vue 滚动显示_vue ul循环滚动的问题
  14. Spring 注解中@Resource 和 Authwired 的区别
  15. 《Nature》论文插图的Matlab复刻第4期—单组多色柱状图(Part2-82)
  16. 【图文测评】小智的服务器亲测
  17. 京东商品详情数据接口(APP端,H5端),实时了解商品价格走势,接口代码教程
  18. Win11找不到显卡控制面板怎么办?
  19. WCF基础教程(三)——WCF通信过程及配置文件解析
  20. 【室内定位】常用的机器人定位导航技术及优缺点

热门文章

  1. 怎样健康喝水 这样喝水有助我们的健康
  2. 2020牛客暑期多校训练营(第八场) Enigmatic Partition
  3. 小程序猜明星小游戏实现方法
  4. 【UE4 第一人称射击游戏】22-拾取弹药
  5. 保姆级使用PyTorch训练与评估自己的MobileNetV2网络教程
  6. html5上一个版本是什么意思,H5是什么意思?H5是怎么发展来的?
  7. eacharts和eacharts-gl、3d饼图、3d柱状图加折线图、下载gl报错解决
  8. oracle数据库中_以下undo和redo说法错误的是,[案例]Oracle报错ORA-01157 ORA-01110 12C数据库undo异常恢复...
  9. 如何正确使用计算机提纲,计算机系统操作论文大纲格式 计算机系统操作论文提纲如何写...
  10. 2023兔年凯立德车载导航最新版