U3D导出的android 集成支付宝中集成移动内支付问题

查看: 366|回复: 4
支付宝移动支付问题,没有及时到账
签到天数: 144 天连续签到: 1 天[LV.7]常住居民III主题帖子e币
本帖最后由 Lili童鞋 于
10:44 编辑
做一个账户充值功能,按照官方的文档来,返回支付成功,但是服务器返回的账户余额没有及时刷新,快的1-2小时之后,慢的7-8小时了才刷新余额,不知道是什么问题,各位大牛给给看看,下面是支付相关的类,哪里有问题吗???public class AlipayApi{
& & public static final int SDK_PAY_FLAG = 1;
& & public static final int SDK_CHECK_FLAG = 2;
& & private Handler mH
& & private A
& & private String orderNo;
& & public AlipayApi(Handler handler, Activity activity) {
& && &&&mHandler =
& && &&&this.activity =
& & }
& & /**
& &&&* call alipay sdk pay. 调用SDK支付
& &&&*
& &&&*/
& & public void pay(SubmitOrderEntity submitOrderEntity) {
& && &&&// 订单
& && &&&String orderInfo = getOrderInfo(submitOrderEntity.order_info.subject, submitOrderEntity.order_info.desc,
& && && && && & submitOrderEntity.order_info.order_amount,submitOrderEntity.order_info.order_sn);
& && &&&// 对订单做RSA 签名
& && &&&String sign = sign(orderInfo);
& && &&&try {
& && && && &// 仅需对sign 做URL编码
& && && && &sign = URLEncoder.encode(sign, &UTF-8&);
& && &&&} catch (UnsupportedEncodingException e) {
& && && && &e.printStackTrace();
& && &&&}
& && &&&// 完整的符合支付宝参数规范的订单信息
& && &&&final String payInfo = orderInfo + &&sign=\&& + sign + &\&&&
& && && && && & + getSignType();
& && &&&Runnable payRunnable = new Runnable() {
& && && && &@Override
& && && && &public void run() {
& && && && && & // 构造PayTask 对象
& && && && && & PayTask alipay = new PayTask(activity);
& && && && && & // 调用支付接口,获取支付结果
& && && && && & String result = alipay.pay(payInfo);
& && && && && & Message msg = new Message();
& && && && && & msg.what = SDK_PAY_FLAG;
& && && && && & msg.obj =
& && && && && & mHandler.sendMessage(msg);
& && && && &}
& && &&&};
& && &&&// 必须异步调用
& && &&&Thread payThread = new Thread(payRunnable);
& && &&&payThread.start();
& & }
& & /**
& &&&* check whether the device has authentication alipay account.
& &&&* 查询终端设备是否存在支付宝认证账户
& &&&*
& &&&*/
& & public void check(View v) {
& && &&&Runnable checkRunnable = new Runnable() {
& && && && &@Override
& && && && &public void run() {
& && && && && & // 构造PayTask 对象
& && && && && & PayTask payTask = new PayTask(activity);
& && && && && & // 调用查询接口,获取查询结果
& && && && && & boolean isExist = payTask.checkAccountIfExist();
& && && && && & Message msg = new Message();
& && && && && & msg.what = SDK_CHECK_FLAG;
& && && && && & msg.obj = isE
& && && && && & mHandler.sendMessage(msg);
& && && && &}
& && &&&};
& && &&&Thread checkThread = new Thread(checkRunnable);
& && &&&checkThread.start();
& & /**
& &&&* get the sdk version. 获取SDK版本号
& &&&*
& &&&*/
& & public void getSDKVersion() {
& && &&&PayTask payTask = new PayTask(activity);
& && &&&String version = payTask.getVersion();
& && &&&Toast.makeText(activity, version, Toast.LENGTH_SHORT).show();
& & }
& & /**
& &&&* create the order info. 创建订单信息
& &&&*
& &&&*/
& & public String getOrderInfo(String subject, String body, String price, String order_sn) {
& && &&&// 签约合作者身份ID
& && &&&String orderInfo = &partner=& + &\&& + Constants.PARTNER + &\&&;
& && &&&// 签约卖家支付宝账号
& && &&&orderInfo += &&seller_id=& + &\&& + Constants.SELLER + &\&&;
& && &&&// 商户网站唯一订单号
& && &&&orderInfo += &&out_trade_no=& + &\&& + order_sn + &\&&;
& && &&&// 商品名称
& && &&&orderInfo += &&subject=& + &\&& + subject + &\&&;
& && &&&// 商品详情
& && &&&orderInfo += &&body=& + &\&& + body + &\&&;
& && &&&// 商品金额
& && &&&orderInfo += &&total_fee=& + &\&& + price + &\&&;
& && &&&// 服务器异步通知页面路径
& && &&&orderInfo += &?ify_url=& + &\&&
//& && && && && & + &http://notify.msp.hk/notify.htm&
& && && && && & + Constants.alipay_notifyURL
& && && && && & + &\&&;
& && &&&// 服务接口名称, 固定值
& && &&&orderInfo += &&service=\&mobile.securitypay.pay\&&;
& && &&&// 支付类型, 固定值
& && &&&orderInfo += &&payment_type=\&1\&&;
& && &&&// 参数编码, 固定值
& && &&&orderInfo += &&_input_charset=\&utf-8\&&;
& && &&&// 设置未付款交易的超时时间
& && &&&// 默认30分钟,一旦超时,该笔交易就会自动被关闭。
& && &&&// 取值范围:1m~15d。
& && &&&// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
& && &&&// 该参数数值不接受小数点,如1.5h,可转换为90m。
& && &&&orderInfo += &&it_b_pay=\&30m\&&;
& && &&&// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付
& && &&&// orderInfo += &&extern_token=& + &\&& + extern_token + &\&&;
& && &&&// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
& && &&&orderInfo += &&return_url=\&\&&;
& && &&&// 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)
& && &&&// orderInfo += &&paymethod=\&expressGateway\&&;
& && &&&return orderI
& & }
//& & /**
//& &&&* get the out_trade_no for an order. 生成商户订单号,该值在商户端应保持唯一(可自定义格式规范)
//& &&&*
//& &&&*/
//& & public String getOutTradeNo() {
//& && &&&SimpleDateFormat format = new SimpleDateFormat(&MMddHHmmss&,
//& && && && && & Locale.getDefault());
//& && &&&Date date = new Date();
//& && &&&String key = format.format(date);
//
//& && &&&Random r = new Random();
//& && &&&key = key + r.nextInt();
//& && &&&key = key.substring(0, 15);
//& && &&&String md5 = Constants.MD5(key);
//
//& && &&&this.orderNo = md5;
//& && &&&return md5;
//& & }
& & /**
& &&&* 获取已经生产的订单编号
& &&&*
& &&&* @return
& &&&*/
& & public String getOrderNo() {
& && &&&return this.orderNo;
& & }
& & /**
& &&&* sign the order info. 对订单信息进行签名
& &&&*
& &&&* @param content
& &&&*& && && && &待签名订单信息
& &&&*/
& & public String sign(String content) {
& && &&&return SignUtils.sign(content, Constants.RSA_PRIVATE);
& & }
& & /**
& &&&* get the sign type we use. 获取签名方式
& &&&*
& &&&*/
& & public String getSignType() {
& && &&&return &sign_type=\&RSA\&&;
& & }
}复制代码
签到天数: 144 天连续签到: 1 天[LV.7]常住居民III主题帖子e币
本帖最后由 Lili童鞋 于
16:53 编辑
private Handler handler = new Handler() {
& && &&&public void handleMessage(Message msg) {
& && && && &switch (msg.what) {
& && && && && & case SDK_PAY_FLAG: {
& && && && && && &&&PayResult payResult = new PayResult((String) msg.obj);
& && && && && && &&&// 支付宝返回此次支付结果及加签,建议对支付宝签名信息拿签约时支付宝提供的公钥做验签
& && && && && && &&&String resultInfo = payResult.getResult();
& && && && && && &&&String resultStatus = payResult.getResultStatus();
& && && && && && &&&// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
& && && && && && &&&if (TextUtils.equals(resultStatus, &9000&)) {
& && && && && && && && &showShortToast(&支付成功&);
& && && && && && && && &finish();
& && && && && && &&&} else {
& && && && && && && && &// 判断resultStatus 为非“9000”则代表可能支付失败
& && && && && && && && &// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
& && && && && && && && &if (TextUtils.equals(resultStatus, &8000&)) {
& && && && && && && && && & showShortToast(&支付结果确认中&);
& && && && && && && && && & finish();
& && && && && && && && &} else {
& && && && && && && && && & // 支付失败,包括用户主动取消支付,或者系统返回的错误
& && && && && && && && && & showShortToast(&支付失败&);
& && && && && && && && &}
& && && && && && &&&}
& && && && && && &&&
& && && && && & }
& && && && && & case SDK_CHECK_FLAG: {
& && && && && && &&&showShortToast(&检查结果为:& + msg.obj);
& && && && && && &&&
& && && && && & }
& && && && && & default:
& && && && && && &&&
& && && && &}
& && &&&}
& & };复制代码
签到天数: 144 天连续签到: 1 天[LV.7]常住居民III主题帖子e币
为什么没有人回答我。。。
签到天数: 144 天连续签到: 1 天[LV.7]常住居民III主题帖子e币
终于过审了。eoe这是咋的了
签到天数: 144 天连续签到: 1 天[LV.7]常住居民III主题帖子e币
大神在哪里,谁来告诉我为什么
推荐阅读热门话题
620001870415415378323275274259254249224216210715
半小时前2&小时前2&小时前3&小时前4&小时前4&小时前4&小时前5&小时前6&小时前6&小时前7&小时前10&小时前11&小时前12&小时前15&小时前昨天&23:51
Powered byandroid app中怎样嵌入第三方支付代码,因业务需要,想请业内人士开发具有移动支付功能的ap_百度知道基于Android的移动应用内支付平台设计与实现--《软件导刊》2015年08期
基于Android的移动应用内支付平台设计与实现
【摘要】:设计了一种基于Android的应用内支付平台。支付平台对第三方支付渠道进行二次封装,设计包括面向移动应用开发者的接入SDK和平台管理服务端系统。该支付平台能够让移动应用开发者更快捷地实现应用内支付功能,且平台经过多款手机游戏应用检验。实验表明该设计流程简洁,平台运行稳定。
【作者单位】:
【关键词】:
【分类号】:TP311.52【正文快照】:
机游戏购买道具、点卡,电子书购买等。从苹果应用商店0 引言和谷歌应用商店相继向开发者和用户推出应用内支付情况看,应用内支付将是未来移动支付的发展趋势。移动支付作为一种新兴的支付方式,其移动便捷性是PC端支付不可替代的,特别是在一些典型应用场景中,如1 应用内支付
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【参考文献】
中国期刊全文数据库
田秀霞;盛翌航;;[J];上海电力学院学报;2012年05期
杨斌;高海燕;;[J];甘肃广播电视大学学报;2012年03期
王青林;陆军;李响;;[J];金融电子化;2012年07期
吕旭峰;尹亚伟;华锦芝;;[J];软件产业与工程;2012年06期
【共引文献】
中国期刊全文数据库
李毅;李卫刚;;[J];国际经贸探索;2013年06期
杨子天;邵宇;;[J];电脑知识与技术;2014年03期
史书明;;[J];电脑知识与技术;2014年13期
王涛;;[J];安阳工学院学报;2014年04期
杨晨;;[J];财经界(学术版);2014年12期
喻思远;;[J];电子技术与软件工程;2014年10期
林毓聪;;[J];电脑编程技巧与维护;2014年22期
王伟;董平;李超;;[J];电子技术与软件工程;2015年03期
温炜;;[J];科技风;2014年08期
杨海民;张涛;赵敏;尤峻;董民;;[J];计算机工程;2014年11期
中国博士学位论文全文数据库
徐显峰;[D];西南财经大学;2013年
中国硕士学位论文全文数据库
李玲玲;[D];西南交通大学;2013年
杨?;[D];重庆大学;2013年
黄亮宇;[D];华中科技大学;2013年
顾钧;[D];华中科技大学;2013年
纪孝桢;[D];华中科技大学;2013年
王希娟;[D];长安大学;2013年
赵幸;[D];北京交通大学;2014年
沈朝平;[D];杭州电子科技大学;2014年
秦亚萍;[D];华中师范大学;2014年
郭保祥;[D];东华大学;2014年
【二级参考文献】
中国期刊全文数据库
陈昱;江兰帆;;[J];福建电脑;2008年11期
朱婷婷;李惠;;[J];电脑与电信;2011年01期
刘振宇;周荣慧;;[J];软件导刊;2010年11期
孙益祥;陈琳;;[J];现代教育技术;2010年04期
姚昱?;刘卫国;;[J];计算机系统应用;2008年11期
中国重要报纸全文数据库
马建;[N];计算机世界;2012年
中国硕士学位论文全文数据库
熊志刚;[D];华东师范大学;2005年
【相似文献】
中国期刊全文数据库
龙延军;;[J];中国金融电脑;2006年10期
张翼;但斌;李伟;张旭梅;;[J];科技管理研究;2006年11期
程末;;[J];广播电视信息;2011年08期
杨杰;;[J];金融科技时代;2013年09期
雷赫;;[J];中国计算机用户;2007年44期
何泽生;;[J];上海信息化;2006年01期
阿拉木斯;;[J];电子商务;2007年01期
尹华川;张翼;但斌;;[J];软科学;2009年09期
李叶林;;[J];移动通信;2014年06期
杨玲;帅青红;;[J];计算机应用研究;2014年03期
中国重要会议论文全文数据库
姚颖颖;郭沛宇;梁晋春;;[A];中国新闻技术工作者联合会第六次会员代表大会、2014年学术年会暨第七届《王选新闻科学技术奖》和优秀论文奖颁奖大会论文集(二等奖)[C];2014年
中国重要报纸全文数据库
本报记者 朱菲娜;[N];中国经济时报;2014年
中国软件评测中心
宋铮;[N];中国电子报;2013年
申海洋;[N];民营经济报;2012年
本报记者 祝慧;[N];中国经济时报;2005年
高雪娟;[N];中国计算机报;2005年
中国大地保险公司信息技术部
王永峰;[N];中国保险报;2009年
马爱平;[N];科技日报;2014年
马可佳;[N];第一财经日报;2009年
董冬;[N];青岛日报;2012年
杨谷;[N];光明日报;2009年
中国硕士学位论文全文数据库
张翼;[D];重庆大学;2006年
王晶;[D];内蒙古大学;2011年
王作成;[D];吉林大学;2014年
孙文泉;[D];山东大学;2014年
王荣庆;[D];对外经济贸易大学;2006年
周蔚林;[D];中山大学;2011年
黄龙;[D];吉林大学;2013年
冯欢;[D];北京交通大学;2010年
胡丽芳;[D];厦门大学;2014年
徐钊;[D];北京邮电大学;2015年
&快捷付款方式
&订购知网充值卡
400-819-9993
《中国学术期刊(光盘版)》电子杂志社有限公司
同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 知识超市公司
出版物经营许可证 新出发京批字第直0595号
订购***:400-819-82499
服务***:010--
在线咨询:
传真:010-
京公网安备75号Android(100)
从下载移动支付功能DEMO,结构如下:
将alipay-demo导入到IDE中,修改PayDemoActivity.java文件。
主要内容如下:
1. PARTNER:商户PID,以2088开头,签约成功就能看到。
2. SELLER: 商户的收款账户
3. RSA_PRIVATE:商户私钥,如果Android版本太高,还要用PKCS8格式的私钥。利用DEMO中的openssl工具自助生成,按照里面的 & 生成命令.txt来操作。签名完成后,会在bin目录下生成三个文件,如下目录:
将rsa_private_key_pkcs8.pem里面的秘钥拷贝出来,去除其中的回车键和空格,使秘钥是一行字符串,然后赋值给RSA_PRIVATE。
另要将rsa_public_key.pem里面的内容复制出来,并将里面的密钥拷贝出来,粘贴到合作伙伴密钥管理中得RSA加密里,否则会出现“”的错误。在粘贴过程中可能会出现“格式错误,请输入正确的rsa公钥”,这是由于支付宝升级造成的,请用下面的地址来修改RSA公钥:
4. RSA_PUBLIC:支付宝公钥,支付宝(RSA)公钥,demo自带不用改,或者用签约支付宝账号登录后,在密钥管理页 & 面获取;或者文档上也有。
配置好,就可以直接运行DEMO了,结果如下:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:530685次
积分:5900
积分:5900
排名:第2936名
原创:163篇
转载:22篇
评论:294条
(1)(3)(2)(4)(11)(5)(1)(9)(8)(4)(3)(3)(4)(15)(2)(48)(30)(7)(6)(2)(6)(9)(1)50234人阅读
Android 高手进阶(21)
转载注明地址:最近有一个需要,我们公司做了一个apk客户端,然后其他的公司可以根据自己的需要来替换里面的资源图片,文字等一些资源文件问题,我本来想这个简单,用两个工程直接替换里面的资源文件就行,老大说,这样子不好,如果要改需要改两个客户端,而且还麻烦,叫我将所有的Activity打成Jar包的形式,这样子我们改了里面的内容就直接发布Jar包出去,其他公司直接下载Jar来使用,这样子他们自己公司也能更好的维护。所以我就想直接将Activity打成Jar包,可是在使用的过程中发现这样子根本行不通,因为如果Activity引用了布局文件的话,比如R.layout.XXX或者R.string.XXX,我们使用的时候会报资源ID未找到的异常,在官网上看到可以将另一个工程当做Library,可是这样子需要将源码给到人家,不能直接发布Jar包,貌似不是我要的那种情况,今天我教大家如果将Activity打成Jar包的形式1.我们新建一个Android工程,取名为ActivityLibrary,这个就是等下我们需要打包成Jar的工程注:MResource这个类很重要,主要是它的作用,利用反射根据资源名字获取资源ID(其实系统也自带了根据资源名字获取资源ID的方法getResources().getIdentifier(&main_activity&, &layout&, getPackageName());第一个参数是资源的名字,第二个参数是资源的类型,例如layout, string等,第三个是包名字)package com.example.
import android.content.C
* 根据资源的名字获取其ID值
* @author mining
public class MResource {
public static int getIdByName(Context context, String className, String name) {
String packageName = context.getPackageName();
int id = 0;
r = Class.forName(packageName + &.R&);
Class[] classes = r.getClasses();
Class desireClass =
for (int i = 0; i & classes. ++i) {
if (classes[i].getName().split(&\\$&)[1].equals(className)) {
desireClass = classes[i];
if (desireClass != null)
id = desireClass.getField(name).getInt(desireClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
当我们的资源Id是一个数组的时候,我们要用下面的方法public static int[] getIdsByName(Context context, String className, String name) {
String packageName = context.getPackageName();
int[] ids =
r = Class.forName(packageName + &.R&);
Class[] classes = r.getClasses();
Class desireClass =
for (int i = 0; i & classes. ++i) {
if (classes[i].getName().split(&\\$&)[1].equals(className)) {
desireClass = classes[i];
if ((desireClass != null) && (desireClass.getField(name).get(desireClass) != null) && (desireClass.getField(name).get(desireClass).getClass().isArray()))
ids = (int[])desireClass.getField(name).get(desireClass);
catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}LibraryActivity这里面比较简单,一个Button,一个TextView,一个ImageViewpackage com.example.
import android.app.A
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.TextV
import android.widget.T
public class LibraryActivity extends Activity {
String msg = &我是来自Jar中的Activity&;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(MResource.getIdByName(getApplication(), &layout&, &activity_main&));
TextView mTextView = (TextView) findViewById(MResource.getIdByName(getApplication(), &id&, &textView1&));
mTextView.setText(msg);
Button mButton = (Button) findViewById(MResource.getIdByName(getApplication(), &id&, &button1&));
mButton.setText(msg);
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(getApplication(), msg, Toast.LENGTH_SHORT).show();
Activity的布局&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
tools:context=&.MainActivity& &
android:id=&@+id/button1&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_alignParentRight=&true&
android:layout_alignParentTop=&true& /&
android:id=&@+id/textView1&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_alignParentRight=&true&
android:layout_below=&@+id/button1& /&
&ImageView
android:id=&@+id/imageView1&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentBottom=&true&
android:layout_alignParentLeft=&true&
android:layout_alignParentRight=&true&
android:layout_below=&@+id/textView1&
android:layout_marginTop=&28dp&
android:src=&@drawable/ic_launcher& /&
&/RelativeLayout&2.我们将ActivityLibrary工程打成Jar包。右键工程---&Export----&Java---&JAR file----&Next如下图只勾选src目录,其他的都不勾选,如图通过上面这几步我们就将Android工程打包好了3.我们来使用刚刚打包好的Activity,我们还需要刚刚那个工程的资源文件,因为我们刚刚只打包了src,资源文件不能打包,因此我们需要自己拿出来,我们需要吧Library.jar加入到libs里面去,然后用到的资源文件,如果layout,string之类的拷贝到对应工程的地方去这个工程一个MainActivity,里面一个按钮,点击按钮跳转到Library中的Activity中,比较简单我直接把代码贴上package com.example.
import android.app.A
import android.content.I
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mButton = (Button) findViewById(R.id.button1);
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClassName(getApplication(), &com.example.activitylibrary.LibraryActivity&);
startActivity(intent);
我们需要在AndroidManifest.xml注册LibraryActivity,否则报Activity找不到异常,总体来说就是这样子,这样子我们将Activity打成的Jar包和资源文件一起发出去,人家就可以调用可,如果你觉得我写的对你有帮助的话你就顶一下,谢谢!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3165577次
积分:17833
积分:17833
排名:第333名
原创:60篇
转载:15篇
评论:4032条
Android 技术讨论群
我的联系方式
文章:15篇
阅读:525074
(3)(1)(1)(1)(1)(3)(4)(4)(2)(2)(5)(6)(10)(8)(15)(4)(2)(1)(2)

参考资料

 

随机推荐