• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android—基于微信开放平台v3SDK,开发微信支付填坑。,androidv3sdk

Android—基于微信开放平台v3SDK,开发微信支付填坑。,androidv3sdk

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 微信开放平台,微信开放平台,微信开放平台登录,微信开放平台有什么用,微信开放平台注册等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android—基于微信开放平台v3SDK,开发微信支付填坑。,androidv3sdk


接触微信支付之前听说过这是一个坑,,,心里已经有了准备。。。我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束。。。进入正题

开发准备:

1.在微信开放平台申请账号

2.成功后创建应用,就是填一些看似很官方很正经的资料了。。。(说审核7天左右,没有意外的情况下你的app第二天就审核成功了是不是很开心,有了appid,是不是就可以调用微   信支付了????-------想多了,真的)

3.微信支付是需要额外申请的:需要资料审核,账户验证,协议签署等步骤,(我记得,,资料审核要填写的东西好多,,,好多,,,账户验证就是你审核成功后微信会发送邮件到你   注册时登记的邮箱账号,其中含有随机金额用于账户验证,协议签署,略,太简单)一定要好好阅读你邮件的任何信息,因为有的细节错了,,,你可能填坑很久。。。。。。

正式开发阶段:

问题1:

调用官方的SDK发现只能成功的调起一次微信,再次支付的时候怎么也调用不起来了

解决:

似乎不是什么正经方法:在手机设置中管理应用程序,清除微信数据,缓存,,再来一遍,绝对可以调起来(当然还是只是一次。。。。)

继续:

我认为要用微信支付嘛,,就只看了调用支付接口的文档:

后来发现需要的参数prepayid是怎么也找不到啊,,后来才发现这个prepayid是先调用”统一下单“这个接口时候温馨反过来的东西,但是官方的SDK中并没有统一下单的代码。坑吗???

所以要先看统一下单文档了 

1.使用自己的APP调用的时候把官网down下来的SDK中WXPayEntryActivity拷贝到自己的项目,所在包的名字最后一定是.wxapi(我连包一起拷了。。。。)

2.在项目清单文件中填写:

 

 3.SDK中的AppRegister拷贝下来,,,里面换成你自己的appid,然后在项目清单中也注册一下。

 

 

4.重点来了,,就是你APP要调微信支付的activity,我这还叫PayActivity

 要调起微信支付页面,要在这个activity中,将你的app注册到微信

 

接下来先调用统一下单获取prepayid,参数,微信人家要xml格式的!我们就得发送xml格式的!

 

好了调用的时候把这个方法的返回值当参数传,,等待微信返回success吧!。。

 我遇见的错误:签名错误

我的原因是大意了 ConfigUtil.NOTIFY_URL这个参数写的空字符串

还有是因为debug版运行的,没有打包运行

返回成功之后,可以调用支付接口了

 

不要忘了这一步去跳转界面,,,,,

没有跳转到微信支付可能是你由运行的debug版本,,,,没有打包。。。。。

下面是我的PayActivity完整代码:

package com.example.taijiapp.ui;

import java.io.StringReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.xmlpull.v1.XmlPullParser;

import com.example.taijiapp.R;
import com.example.taijiapp.util.Constants;
import com.example.taijiapp.util.MD5;
import com.example.taijiapp.util.T;
import com.example.taijiapp.util.Util;
import com.example.taijiapp.utils.ConfigUtil;
import com.tencent.mm.sdk.modelpay.PayReq;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.widget.Button;

public class PayActivity extends Activity {
	PayReq req;
	private IWXAPI msgApi;
	Map<String, String> resultunifiedorder;
	StringBuffer sb;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.pay);
		req = new PayReq();
		sb = new StringBuffer();
		msgApi = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
		/**
		 * 将app注册到微信
		 */
		boolean registerApp = msgApi.registerApp(Constants.APP_ID);
		T.show(this, "注册========"+registerApp+"");
		Button appayBtn = (Button) findViewById(R.id.appay_btn);
		Button check_pay_btn = (Button) findViewById(R.id.check_pay_btn);
		appayBtn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				GetPrepayIdTask getPrepayId = new GetPrepayIdTask();
				getPrepayId.execute();
			}
		});
		/**
		 * 将该app注册到微信
		 */
		check_pay_btn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				genPayReq();
				sendPayReq();
				
			}
		});
//		// 生成签名参数
//		Button appay_pre_btn = (Button) findViewById(R.id.appay_pre_btn);
//		appay_pre_btn.setOnClickListener(new View.OnClickListener() {
//
//			@Override
//			public void onClick(View v) {
//				genPayReq();
//			}
//		});
	}
	/**
	 * 生成签名
	 */

	private String genPackageSign(List<NameValuePair> 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.KEY);
		Log.e("拼接=====", sb.toString());
		String packageSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase();
		Log.e("orion生成签名===", packageSign);
		return packageSign;
	}

	/**
	 * 签名工具 不含商户密钥 -暂时不用 = * 编码格式 UTF-8 = * @return
	 */
	public static String createSignNoKey(List<NameValuePair> 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('&');
		}
		String signStr = sb.toString();
		String subStr = signStr.substring(0, signStr.length() - 1);
		// 注意sign转为大写
		return MD5.getMessageDigest(subStr.getBytes()).toUpperCase();
	}

	private String genAppSign(List<NameValuePair> 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.KEY);

		this.sb.append("sign str\n" + sb.toString() + "\n\n");
		String appSign = MD5.getMessageDigest(sb.toString().getBytes());
		Log.e("orion", appSign);
		return appSign;
	}

	private String toXml(List<NameValuePair> params) {
		StringBuilder sb = new StringBuilder();
		sb.append("<xml>");
		for (int i = 0; i < params.size(); i++) {
			sb.append("<" + params.get(i).getName() + ">");

			sb.append(params.get(i).getValue());
			sb.append("</" + params.get(i).getName() + ">");
		}
		sb.append("</xml>");

		Log.e("orion", sb.toString());
		return sb.toString();
	}

	private class GetPrepayIdTask extends AsyncTask<Void, Void, Map<String, String>> {

		private ProgressDial



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android—基于微信开放平台v3SDK,开发微信支付填坑。,androidv3sdk

相关文章

  • 2017-05-26android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
  • 2017-05-26Android之SQLite数据存储,androidsqlite
  • 2017-05-26Linux主机网络流量监控ifstat
  • 2017-05-26重写dispatchKeyEvent方法 按返回键back 执行两次的解决办法,dispatchkeyevent
  • 2017-05-26三年0故障总结,提升代码质量的秘诀
  • 2017-05-26Android-绘制爱心,android-绘制
  • 2017-05-26Android中使用Notification实现普通通知栏(Notification示例一),rest示例java实现
  • 2017-05-26实现Discuz论坛客户端应用源码,discuz源码
  • 2017-05-26仿天天动听5应用项目源码,项目源码
  • 2017-05-26Android实用技巧-缓存的使用分析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 12306火车票订票项目源码,12306火车票订票
    • Android界面架构(Activity,PhoneWiondow,DecorView)简介,activitydecorview
    • 手机安全卫士——高级工具-电话归属地查询,安全卫士归属地查询
    • Android中实现APP文本内容的分享发送与接收方法简述,androidapp
    • Android中的多线程断点下载,android断点下载
    • 对Android的恶意吐槽(勿看,有毒)
    • Android深入四大组件(一)应用程序启动过程
    • 一个现代化的JSON库Moshi针对Android和Java,jsonandroid
    • Android缓存处理
    • 解决关于 在android studio 出现的 DELETE_FAILED_INTERNAL_ERROR Error while Installing APK 问题,whileinstallingapk

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有