androidvisual stuidio code开发的app能集成微信吗

Android Studio首页、文档和下载 - Android 开发环境 - 开源中国社区
当前访客身份:游客 [
当前位置:
Android Studio
Android Studio 是一个全新的 Android 开发环境,基于 IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,在 IDEA 的基础上,Android Studio 提供:基于
的构建支持Android 专属的重构和快速修复提示工具以捕获性能、可用性、版本兼容性等问题支持 ProGuard 和应用签名基于模板的向导来生成常用的 Android 应用设计和组件功能强大的布局编辑器,可以让你拖拉 UI 控件并进行效果预览
Android Studio最新更新资讯,共160条&&(,)
12评/2546阅
23评/5432阅
24评/6313阅
10评/4502阅
12评/4930阅
授权协议:
开发语言:
操作系统:&跨平台&
收录时间: 日
僅佌侕已 发表于2天前
,最后回答(1天前):
咖喱给给 发表于2天前
,最后回答(2天前):
omei55 发表于3天前
,最后回答(2天前):
Ming楠 发表于4天前
,最后回答(4天前):
Ming楠 发表于5天前
,最后回答(5天前):
梅晶晶 发表于1周前
yaozhengzheng 发表于3周前
,最后回答(3周前):
mafei310 发表于3周前
jiaming_ 发表于4周前
,最后回答(4周前):
wangxiaoxiao32 发表于1个月前
木槿花骑士 发表于1个月前
,最后回答(1个月前):
AD小东 发表于7个月前
,最后回答(1个月前):
菜鸟刘 发表于1个月前
Kid_Lau 发表于3个月前
,最后回答(1个月前):
僅佌侕已 发表于1个月前
,最后回答(1个月前):
僅佌侕已 发表于1个月前
,最后回答(1个月前):
aijiaoer 发表于1个月前
,最后回答(1个月前):
Int_Crazy 发表于1个月前
Jieth 发表于11个月前
,最后回答(1个月前):
kiss_大汉 发表于1个月前
,最后回答(1个月前):
使用 Android Studio 中的任何问题
:从一出生就和Xcode对比,注定渣
:好久没更新了,是不是在憋大招
:今天最大的新闻应该是
:Android studio 是未来Android开发必备工具,Eclipse对于安卓开发必然淘汰.
共有 202 个类似软件
Android SDK 是 Android 的开发工具包。Android开发专区 Android是谷歌(Google)公司...
Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是...
Android NDK 是在SDK前面又加上了原生二字,即Native Development Kit,因此又被G...
DroidDraw是一个Android界面设计器,基于Java Swing开发,我们可以通过它来生成复杂...
PHP可不仅仅只能在互联网站上发展,一个PHP for Android (PFA)站点表示他们将可以发...
Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单。Xamarin的产品简化...
Windows Phone 7 SDK 是微软最新的手机操作系统 Windows Phone 7 的软件开发包。 ...
Necessitas是一个 用于Android平台的qt开发的实现。众所周知,Qt是诺基亚所有(最初...
微软.NET for Android,也就是MonoDroid,是Novell公司的MonoTouch项目在Android系...
Android Tools 是一个轻量级的 Android 应用开发集成环境,用于创建、构建、安装和...
MOTODEV Studio for Android,这是基于Android的开发环境,为开发者们提供新的MOT...
共有 715 人关注 Android StudioAndroid—基于微信开放平台v3SDK开发(微信支付填坑)
作者:奋斗者—cyf
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Android—基于微信开放平台v3SDK开发(微信支付填坑),具有一定的参考价值,有需要的可以了解一下。
接触微信支付之前听说过这是一个坑,,,心里已经有了准备。。。我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束。。。进入正题
开发准备:
1.在微信开放平台申请账号
2.成功后创建应用,就是填一些看似很官方很正经的资料了。。。(说审核7天左右,没有意外的情况下你的app第二天就审核成功了是不是很开心,有了appid,是不是就可以调用微&& 信支付了????-------想多了,真的)
3.微信支付是需要额外申请的:需要资料审核,账户验证,协议签署等步骤,(我记得,,资料审核要填写的东西好多,,,好多,,,账户验证就是你审核成功后微信会发送邮件到你&& 注册时登记的邮箱账号,其中含有随机金额用于账户验证,协议签署,略,太简单)一定要好好阅读你邮件的任何信息,因为有的细节错了,,,你可能填坑很久。。。。。。
正式开发阶段:
调用官方的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.
import java.io.StringR
import java.net.InetA
import java.net.NetworkI
import java.net.SocketE
import java.util.E
import java.util.HashM
import java.util.LinkedL
import java.util.L
import java.util.M
import java.util.R
import org.apache.http.NameValueP
import org.apache.http.message.BasicNameValueP
import org.xmlpull.v1.XmlPullP
import com.example.taijiapp.R;
import com.example.taijiapp.util.C
import com.example.taijiapp.util.MD5;
import com.example.taijiapp.util.T;
import com.example.taijiapp.util.U
import com.example.taijiapp.utils.ConfigU
import com.tencent.mm.sdk.modelpay.PayR
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIF
import android.app.A
import android.app.ProgressD
import android.content.C
import android.net.wifi.WifiI
import android.net.wifi.WifiM
import android.os.AsyncT
import android.os.B
import android.util.L
import android.util.X
import android.view.V
import android.widget.B
public class PayActivity extends Activity {
private IWXAPI msgA
Map&string, string=""&
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() {
public void onClick(View v) {
GetPrepayIdTask getPrepayId = new GetPrepayIdTask();
getPrepayId.execute();
* 将该app注册到微信
check_pay_btn.setOnClickListener(new View.OnClickListener() {
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() {
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 packageS
* 签名工具 不含商户密钥 -暂时不用 = * 编码格式 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 appS
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 ProgressD
protected void onPreExecute() {
dialog = ProgressDialog.show(PayActivity.this, getString(R.string.app_tip),
getString(R.string.getting_prepayid));
protected void onPostExecute(Map&string, string=""& result) {
if (dialog != null) {
dialog.dismiss();
sb.append("prepay_id\n" + result.get("prepay_id") + "\n\n");
resultunifiedorder =
protected void onCancelled() {
super.onCancelled();
protected Map&string, string=""& doInBackground(Void... params) {
String url = String.format("https://api.mch./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&string, string=""& xml = decodeXml(content);
public Map&string, string=""& decodeXml(String content) {
Map&string, string=""& xml = new HashMap&string, string=""&();
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new StringReader(content));
int event = parser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
String nodeName = parser.getName();
switch (event) {
case XmlPullParser.START_DOCUMENT:
case XmlPullParser.START_TAG:
if ("xml".equals(nodeName) == false) {
// 实例化student对象
xml.put(nodeName, parser.nextText());
case XmlPullParser.END_TAG:
event = parser.next();
} catch (Exception e) {
Log.e("orion", e.toString());
* 生成随机数
private String genNonceStr() {
Random random = new Random();
return MD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());
private long genTimeStamp() {
return System.currentTimeMillis() / 1000;
private String genOutTradNo() {
Random random = new Random();
return MD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());
* 获取设备的ip地址
public String getLocalIpAddress() {
for (Enumeration&networkinterface& en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration&inetaddress& enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
} catch (SocketException ex) {
private String getWifiIp() {
// 获取wifi服务
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// 判断wifi是否开启
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = intToIp(ipAddress);
* 转化成Ip地址的格式
* @param i
private String intToIp(int i) {
return (i & 0xFF) + "." + ((i && 8) & 0xFF) + "." + ((i && 16) & 0xFF) + "." + (i && 24 & 0xFF);
private String genProductArgs() {
StringBuffer xml = new StringBuffer();
String ip = getWifiIp();
if (ip == "" && ip == "") {
ip = getLocalIpAddress();
String nonceStr = genNonceStr();
xml.append("");
List&namevaluepair& packageParams = new LinkedList&namevaluepair&();
packageParams.add(new BasicNameValuePair("appid", Constants.APP_ID));
packageParams.add(new BasicNameValuePair("body", "APPtest"));
packageParams.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));
packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));
packageParams.add(new BasicNameValuePair("notify_url", ConfigUtil.NOTIFY_URL));
packageParams.add(new BasicNameValuePair("out_trade_no", genOutTradNo()));
packageParams.add(new BasicNameValuePair("spbill_create_ip", ip));
packageParams.add(new BasicNameValuePair("total_fee", "100"));
packageParams.add(new BasicNameValuePair("trade_type", "APP"));
String sign = genPackageSign(packageParams);
packageParams.add(new BasicNameValuePair("sign", sign));
String xmlstring = toXml(packageParams);
} catch (Exception e) {
Log.e("TAG", "fail, ex = " + e.getMessage());
private void genPayReq() {
req.appId = Constants.APP_ID;
req.partnerId = Constants.MCH_ID;
req.prepayId = resultunifiedorder.get("prepay_id");
req.packageValue = "prepay_id=" + resultunifiedorder.get("prepay_id");
req.nonceStr = genNonceStr();
req.timeStamp = String.valueOf(genTimeStamp());
List&namevaluepair& signParams = new LinkedList&namevaluepair&();
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");
Log.e("orion==genPayReq===============", signParams.toString());
private void sendPayReq() {
boolean sendReq = msgApi.sendReq(req);
T.show(this, "微信跳转====="+sendReq+"");
&/namevaluepair&&/namevaluepair&&/namevaluepair&&/namevaluepair&&/inetaddress&&/networkinterface&&/string,&&/string,&&/string,&&/string,&&/string,&&/string,&&/void,&&/namevaluepair&&/namevaluepair&&/namevaluepair&&/namevaluepair&&/string,&
里面没有的类,,,,呐:。自己下载一下拷贝一下。。。
参考文章:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具为啥我的android
studio总是不能够创建app-debug.apk文件? - 开源中国社区
当前访客身份:游客 [
当前位置:
Waiting for device. Target device: xiaomi-mi_2-238dcbf2 Uploading file &local path: D:\new_android\workspace\MyApplication\app\build\outputs\apk\app-debug.apk &remote path: /data/local/tmp/com.example.god.myapplication Local path doesn't exist.
8:51:40 Gradle build finished in 9 sec 8:52:07 Copy property error: Copy property error 8:52:30 Gradle build finished with 1 error(s) in 4 sec 8:52:35 Unexpected Error &&&&&&& Local path doesn't exist. Local path doesn't exist. The project may need to be synced with Gradle files. &&&&&&& Sync Project with Gradle files //求大神指教啊,非常感谢
共有6个答案
<span class="a_vote_num" id="a_vote_num_
Gradle配置有没有错误啊
<span class="a_vote_num" id="a_vote_num_
如果配置出错了怎么办啊,大神
<span class="a_vote_num" id="a_vote_num_
这个版本Android SDK Tools的find_java.bat有问题,多了个空格
/p/android/issues/detail?id=82229
ps:目前已推出更新rev.24.0.1
<span class="a_vote_num" id="a_vote_num_
find_java.bat文件在哪里啊亲
<span class="a_vote_num" id="a_vote_num_
引用来自“lengwei”的评论find_java.bat文件在哪里啊亲 sdk\tools\lib\find_java.bat
/p/android/issues/detail?id=82229#makechanges
https://android-/#/c//find_java/find_java.bat
<span class="a_vote_num" id="a_vote_num_
我的不多空格,且只有一个find_java.bat文件,还是不好使啊!求教!
更多开发者职位上
有什么技术问题吗?
lengwei...的其它问题
类似的话题使用Android Studio搭建开发环境 - ImportNew
| 分类: ,
| 标签: , ,
2013年Google I/O 大会首次发布了Android Studio IDE(Android平台集成开发环境)。它基于Intellij IDEA 开发环境,旨在取代Eclipse和ADT(Android开发者工具)为开发者提供更好的开发工具。既然Google一直在努力推广,相信不久以后就有望赶上Eclipse。
相比Eclipse,Android Studio IDE有自己优缺点:
优点:对UI界面设计和编写代码有更好地支持,可以方便地调整设备上的多种分辨率。
优点:同样支持ProGuard工具和应用签名。
缺点:不过,目前版本的Android Studio不能在同一窗口中管理多个项目。每个项目都会打开一个新窗口。我猜这是借鉴了Intellij IDEA的行为,而且Google近期不会对此做出调整。
缺点:虽然支持Gradle自动化构建工具,但对于刚从Eclipse平台转移过来的开发者来说还需要一段时间去学习和适应。
如果你已经在系统上安装了Android SDK的话,可以从Android Developer网站下载最新版本的Android Studio。
附Android SDK下载地址:
安装android-studio-bundle-&version&.exe文件。
根据安装向导指示完成安装:
如果还没在系统上安装JDK,那你还需要安装最新版本的Java,然后设置好JDK_HOME和JAVA_HOME环境变量:
是否限制安装配置,选择“任何本机用户都能使用”,下面一项“仅供你使用”:
选择安装路径:
安装完成后,打开Android Studio项目启动IDE。
启动IDE会花上几秒钟,并显示以下启动画面:
有时Android Studio(大多数情况发生在旧版本上)会启动失败并显示以下报错:
用管理员权限重新启动以解决这个问题。
在Android Stdio的主界面,选择“Configure选项–&Project Defaults选项–& Project Structure选项”——Android SDK and configure the paths to your JDK and Android SDK:
在Android Studio 主界面中点击“New Project”:
当你点击“New Project”项后,Android Studio将显示如下对应的应用程序名称、模块名、包名。而且你可以指定编译应用程序的Android SDK版本和所支持的最低SDK版本,然后任选一个内置主题。
接下来你需要选择在手机上显示的应用程序图标,当然我们也可以按照默认设置不作改动,点击Next继续。
需要选择创建何种类型的Activity用户界面,点击Next完成创建。如果还不清楚该创建哪一种,那就选择Blank Activity来产生一个空白事件。
为新建立的Activity命名,点击Finish以完成创建。
第一次创建项目时,因为IDE会索引项目工程下载一些Gradle工具的相关包,所以会花费一点时间。
然后,在IDE界面点击Run按钮来启动项目。
IDE会提示你从可用的设备或模拟器列表中选择一个进行Android应用布署。
在这里,我从“Android Virtual device”中选择了android_2_3_3版本模拟器,再点击OK完成。如果模拟器没有提前启动,启动模拟器会花费非常长的时间。我的建议是手动启动模拟器,接着你就能在“Choose a running device”列表中找到正在运行的模拟器。
模拟器会自动生成“HelloWorld”应用并安装在你的模拟器或设备上,紧接着运行程序。
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
Android 爱好者,(新浪微博:)
很明显前面几步都是多余的,应该直接从第6步开始
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:@
广告与商务合作QQ:
&#8211; 好的话题、有启发的回复、值得信赖的圈子
&#8211; 写了文章?看干货?去头条!
&#8211; 为IT单身男女服务的征婚传播平台
&#8211; 优秀的工具资源导航
&#8211; 活跃 &#038; 专业的翻译小组
&#8211; 国内外的精选博客文章
&#8211; UI,网页,交互和用户体验
&#8211; JavaScript, HTML5, CSS
&#8211; 专注Android技术分享
&#8211; 专注iOS技术分享
&#8211; 专注Java技术分享
&#8211; 专注Python技术分享
& 2016 ImportNew

我要回帖

更多关于 stuidio 的文章

 

随机推荐