支付宝支付传送门:https://www.cnblogs.com/dingxiansen/p/9208949.html

二、微信支付

1. 微信支付流程图


相比较而言,微信支付是要比支付宝麻烦一些,并且微信的开发文档个人也感觉写的比较乱,初次接触会有些懵。

2. 集成前准备

  1. 注册、登录微信开发者平台
  2. 注册应用,得到APPID申请开通微信支付,填写申请资料
  3. 找到 开发者文档 下载SDK

3.开始集成

  微信支付可以直接在app build.gradle中设置

/*微信支付集成*/
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

  然后在你的包下,这里要注意以下放在指定包下边

  

 AndroidManifest.xml配置

 <!--微信支付,回掉-->
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop" />

微信的后台参数返回,相对于支付宝的返回信息,微信返回信息更加清晰一下,不过没啥用,一会加密完都一个样子

格式化后:

{
"msg":"success",
"code":200,
"data":{
"appid":"自己申请的appId",
"noncestr":"jqEmamoTbMoi0hRP",
"package":"Sign=WXPay",
"partnerid":"150****351",
"prepayid":"wx21144021******fd37e2948041031",
"sign":"50E345DCF6900A*****10126E7424",
"timestamp":"1529563221"
},
"status":"0"
}

拿到返回参数,微信支付方法

 /*微信支付测试OK*/
private void testWxPay(final String key, final String value) {
StringRequest stringRequest = new StringRequest(Request.Method.POST, NetWorkUrl.WXPAY, new Response.Listener<String>() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onResponse(String s) {
Log.e("GoPayOrderActivity", "-------getJson2-------" + s.toString()); /*判断code*/
String code = (JSONObject.parseObject(s.toString()).getString("code"));
if (code.equals("200")) {
String jsonObject = JSONObject.parseObject(s.toString()).getString("data");
String appId = JSONObject.parseObject(jsonObject).getString("appid");
String sign = JSONObject.parseObject(jsonObject).getString("sign");
String packageWx = JSONObject.parseObject(jsonObject).getString("package");
String partnerid = JSONObject.parseObject(jsonObject).getString("partnerid");
String prepayid = JSONObject.parseObject(jsonObject).getString("prepayid");
String noncestr = JSONObject.parseObject(jsonObject).getString("noncestr");
String timestamp = JSONObject.parseObject(jsonObject).getString("timestamp");
Log.e("GoPayOrderActivity", "onResponse: appId" + appId);
Log.e("GoPayOrderActivity", "onResponse: sign" + sign);
Log.e("GoPayOrderActivity", "onResponse: package" + packageWx);
Log.e("GoPayOrderActivity", "onResponse: partnerid" + partnerid);
Log.e("GoPayOrderActivity", "onResponse: prepayid" + prepayid);
Log.e("GoPayOrderActivity", "onResponse: noncestr" + noncestr);
Log.e("GoPayOrderActivity", "onResponse: timestamp" + timestamp);
api = WXAPIFactory.createWXAPI(GoPayOrderActivity.this, appId); PayReq req = new PayReq();
//req.appId = "wxf8b4f85f3a794e77"; // 测试用appId
//req的参数接受可以拿取order对象的数据
req.appId = appId;
req.partnerId = partnerid;
req.prepayId = prepayid;
req.nonceStr = noncestr;
req.timeStamp = timestamp;
req.packageValue = packageWx;
req.sign = sign;
req.extData = "app data"; // optional
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) { }
}) {
@Override
public Map<String, String> getParams() throws AuthFailureError {
Log.e("GoPayOrderActivity", "getParams:-----------------> " + userEntity.getPhone()); Map<String, String> map = new HashMap<String, String>();
map.put("account", userEntity.getPhone());
map.put(key, value);
// map.put("productId", "1");
// map.put("productId", "1");
map.put("token", userEntity.getToken());
return map;
} @Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
if (userEntity.getToken().equals("") && userEntity != null) {
headers.put("Authorization", userEntity.getToken());
}
return headers;
} };
/*设置请求一次*/
stringRequest.setRetryPolicy(
new DefaultRetryPolicy(
5000,//默认超时时间,应设置一个稍微大点儿的,例如本处的500000
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,//默认最大尝试次数
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
)
);
AppApplication.getHttpQueues().add(stringRequest);/*请求数据*/
}

微信支付回调

WXPayEntryActivity.java

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private static final String TAG = "WXPayEntryActivity";

    private IWXAPI api;

    @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result); api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
api.handleIntent(getIntent(), this);
} @Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
} @Override
public void onReq(BaseReq req) {
} @Override
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(WXPayEntryActivity.this);
/*注释掉的可以成功*/
builder.setTitle(R.string.app_tip);
builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));
builder.show();
int code = resp.errCode;
switch (code) {
case 0:
MobclickAgent.onEvent(WXPayEntryActivity.this, "payment_success", "付款成功");
// finish();
// Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show();
/*跳转我的会员页面*/
AppApplication.addActivity(WXPayEntryActivity.this);
Intent intent = new Intent(this, MyVipActivity.class);
startActivity(intent);
break;
case -1:
MobclickAgent.onEvent(WXPayEntryActivity.this, "payment_fali", "付款失败");
// 失败原因 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配,其他异常等
Toast.makeText(this, "支付失败", Toast.LENGTH_SHORT).show();
finish();
break;
case -2:
Toast.makeText(this, "支付取消", Toast.LENGTH_SHORT).show();
finish();
break;
default:
Toast.makeText(this, "支付取消", Toast.LENGTH_SHORT).show();
finish();
break;
} } }
}

完成上述,微信支付也是可以完成的了,注意测试的时候要用Release包,测试包是调用不起来微信的

如果问题或建议请发送到我的邮箱:dingchao7323@qq.com

Android开发支付集成——微信集成的更多相关文章

  1. Android开发支付集成——支付宝集成

    微信支付传送门:https://www.cnblogs.com/dingxiansen/p/9209159.html 一.支付宝支付 1. 支付宝支付流程图 2. 集成前准备 去蚂蚁金服注册应用获取a ...

  2. Android开发——支付宝和微信支付快速接入流程

    一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝开放平台,申请我们的支付功能:https://open.alipay.com/platform/home.htm 支付宝首页 这里 有 ...

  3. Salesforce 开发 | Salesforce与微信集成实操指南

    配置前须知 Salesforce通过试点对特定客户提供Lightning WeChat Messaging,该试点需要同意特定的条款.除非Salesforce宣布WeChat Messaging全面可 ...

  4. odoo开发笔记--与微信集成

    odoo 与微信 https://github.com/JoneXiong/oejia_wx

  5. Android开发之仿微信显示更多文字的View

    最近开发需求中要模仿微信朋友圈文章的展开收起功能,网上找了找,发现都有问题,于是乎自己在前辈的基础上进行了一定量的修改,下边将源码贴出来供大家参考:1.主Activity布局文件就不粘贴了,很简单,就 ...

  6. android开发--布局三(微信布局)

    微信主界面 我们布局应该从局来看,如上图,我们可以分为三个大的LinearLayout,再从LinearLayout嵌套其它布局,从而做出界面 文件 主界面代码: <LinearLayout x ...

  7. Android开发 sharesdk分享微信/朋友圈的时候只显示文字,不显示链接

    问题:分享的时候只将分享的content分享出去了,连标题及链接都没有分享出去. 原因:没有配置image导致. 解决办法: 在  showShare 方法里面添加配置: if(ImageUrlOrP ...

  8. 五步搞定Android开发环境部署

    引言   在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入 Android浪潮的朋友们,为了确保大家能顺利完成开发 ...

  9. Android开发学习——搭建开发环境

    在学校开课学习了android的一些简单的UI组件,布局,四大组件学习了2个,数据存储及网络通信,都是一些简单的概念,入门而已.许多东西需要自己去学习. 学习一下 Android开发环境的搭建,两种方 ...

随机推荐

  1. java并发编程(1) --并发基础及其锁的原理

    引言 多线程的知识点是一个庞大的体现,对此也是一知半解.一直想系统的深入的学习多线程的知识,奈何一直没有找到机会,好吧,其实就是懒.最近在项目中接触到一个多并发的项目,在项目中踩了无数的坑.在此下定决 ...

  2. 『调错』OGG Error opening module ggjava_ue.dll

    Win7 配置 OGG (GoldenGate) Adapter Java 时, 报错: ERROR OGG-01122 Oracle GoldenGate Capture, javaue.prm: ...

  3. FreeSql.DbContext 第二个版本介绍

    FreeSql.DbContext 实现类似 EFCore 使用方法,跟踪对象状态,最终通过 SaveChanges 方法提交事务. 目前是第二个初版,已实现状态跟踪保存(导航属性的跟踪暂时不支持). ...

  4. RIP 实验

    一.环境准备 1. 软件:GNS3 2. 路由:c7200 二.实验操作 实验要求: 1. 理解 RIP 协议的工作原理 2. 理解 RIPv1.RIPv2 的特性 3. 掌握 RIP 协议的基本配置 ...

  5. C# 数组比较--取得两个集合的交集,差集,并集的方法

    方法关键字: 交集:Intersect 差集:Except 并集:Union 使用代码: , , , , }; , , , , }; var 交集 = arr1.Intersect(arr2).ToL ...

  6. 设计模式 | 抽象工厂模式(abstract factory)

    定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...

  7. UiPath如何实现暂停功能?

    照理说一个无人值守的机器人原本是不应该有人工操作介入的,也就不会提供暂停功能.但客户可能出于业务需要,或者风险管控的考虑,会需要机器人具备暂停功能.通常,会希望在机器人运行时,用户摁下快捷键,机器人就 ...

  8. npm 模块化管理

    我们要使用 npm 进行包管理,首先我们得安装 npm,怎么安装?其实只要你安装了 node,那便相当于安装了 npm: node下载地址:http://nodejs.cn/download/ 由于 ...

  9. Windows Server 2016-DHCP服务器审核日志大小调整

    DHCP Server服务在%windir%\System32\DHCP或"%SystemRoot%\System32\DHCP"文件夹下存放了一个审核日志.审核日志文件名称是基于 ...

  10. 实战经验|大神战队都在i春秋教你打CTF

    全国大学生信息安全竞赛创新实践能力赛旨在培养.选拔.推荐优秀信息安全专业人才创造条件,促进高等学校信息安全专业课程体系.教学内容和方法的改革,培养学生的创新意识与团队合作精神,普及信息安全知识,增强学 ...