导航:首页 > 操作系统 > 财付通androidsdk

财付通androidsdk

发布时间:2022-12-10 18:49:48

A. android微信支付demo怎么开通零钱支付

准备:

1,导入微信的libs包libammsdk.jar;

2,测试时使用weixinDemo中的debug_keystore;

3,需要注意应用要通过审核,并且几个Key值正确,一下为微信支付Demo中的值:

?

1

2

3

4

5

6

7

8

9

10

//微信公众平台id;

private

String app_wx_appid=WxConstants.app_wx_appid;

//微信开放平台和商户约定的密钥

private

String app_wx_secret_key="";

//微信公众平台商户模块和商户约定的密钥

private

String app_wx_parent_key="";

//微信公众平台商户模块和商户约定的支付密钥

private

String app_wx_pay_key="";

//
商家向财付通申请的商家id */

private

String app_tx_parent_key = "1900000109";

==========================================

根据微信支付Demo,微信支付分为三步:

第一步,获取accessToken,accessToken值第二步要用;

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

private

class
GetAccessTokenTask extends

AsyncTask<void,
void,=""

wxgetaccesstokenresult="">
{

@Override

protected

WxGetAccessTokenResult doInBackground(Void... params) {

WxGetAccessTokenResult
result = getAccessToken();

return

result;

}

@Override

protected

void
onPostExecute(WxGetAccessTokenResult result) {

if

(result.localRetCode == WxLocalRetCode.ERR_OK) {

GetPrepayIdTask
getPrepayId = new

GetPrepayIdTask();

getPrepayId.execute(result);

}

}}</void,>
解析服务器响应
?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

private

WxGetAccessTokenResult getAccessToken() {

WxGetAccessTokenResult
result = new

WxGetAccessTokenResult();

String
url = String.format(api_get_access_token,

"client_credential",

app_wx_appid,

app_wx_secret_key);

byte[]
buf = WeixinUtil.httpGet(url);

if

(buf == null

|| buf.length == 0)
{

result.localRetCode
= WxLocalRetCode.ERR_HTTP;

return

result;

}

String
content = new

String(buf);

result.parseFrom(content);

return

result;

}
第二步,根据第一步的accesstoken值,将 组装的商品参数Post给微信服务器
?

1

2

3

4

5

6

7

8

9

10

11

12

13

private

class
GetPrepayIdTask extends

AsyncTask<wxgetaccesstokenresult, void,=""

wxgetprepayidresult="">
{

@Override

protected

WxGetPrepayIdResult doInBackground(WxGetAccessTokenResult... params) {

WxGetPrepayIdResult
result = getPrepayId(params[0]);

return

result;

}

@Override

protected

void
onPostExecute(WxGetPrepayIdResult result) {

if

(result.localRetCode == WxLocalRetCode.ERR_OK) {

sendPayReq(result);

}

}

}</wxgetaccesstokenresult,>
组装参数
?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

private

WxGetPrepayIdResult getPrepayId(WxGetAccessTokenResult accessTokenResult) {

String
url = String.format(api_get_preorder_id,accessTokenResult.accessToken);

String
entity = appSign.getWxPrepayAppSign();WxGetPrepayIdResult
result = new

WxGetPrepayIdResult();byte[]
buf = WeixinUtil.httpPost(url, entity);

if

(buf == null

|| buf.length == 0)
{

result.localRetCode
= WxLocalRetCode.ERR_HTTP;

return

result;

}String
content = new

String(buf);

result.parseFrom(content);

return

result;

}
Post给服务器
?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<span
style="white-space:pre">
</span>private

void
sendPayReq(WxGetPrepayIdResult result) {PayReq
req = new

PayReq();

req.appId
= app_wx_appid;

req.partnerId
= app_tx_parent_key;

req.prepayId
= result.prepayId;

req.nonceStr
= appSign.getNoncestr();

req.timeStamp
= appSign.getTimestamp();

req.packageValue
= "Sign="

+ appSign.getPackageSign();List<namevaluepair>
signParams = new

LinkedList<namevaluepair>();

signParams.add(new

BasicNameValuePair("appid",
req.appId));

signParams.add(new

BasicNameValuePair("appkey",
app_wx_pay_key));

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
= WeixinUtil.genSign(signParams);wxRequest.sendReq(req);

}</namevaluepair></namevaluepair>
?

1


?

1


第三步:在项目下新建一个包wxapi,建立一个类名为WXPayEntryActivity作为接受微信的支付结果,不过最终结果以服务器的返回为准notify_url:
?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

package

net.sourceforge.simcpux.wxapi;

public

class
WXPayEntryActivity extends

Activity implements

IWXAPIEventHandler{<pre name="code"

class="java"><span
style="white-space:pre">
</span>@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(this);

builder.setTitle("支付结果");

builder.setMessage("支付结果"+String.valueOf(resp.errCode));

builder.show();

}

}</pre>}

<p></p>

<pre
class="brush:java;"></pre>

==========================================

<p></p>

<p>暂时没想到其他想说的,先看个效果</p>

<p>1,包结构,需要注意的就是接收微信返回结果的那个类名;</p>

<p><img
src="http://www.2cto.com/uploadfile/Collfiles/20140901/201409010901522.png"

alt="\"
style="display:
inline; width: 239px; height: 238px;"></p>

<p>2,组装数据,规则在文档中有说明<㖞�"http://www.2cto.com/kf/ware/vc/"

target="_blank"

class="keylink">vcD4KPHByZSBjbGFzcz0="brush:java;">//package_
字段生成方法

//package生成方法:

//A)对所有传入参数按照字段名的ASCII
码从小到大排序(字典序)后,使用URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1;

//B)
在string1 最后拼接上key=partnerKey 得到stringSignTemp 字符串, 并对 stringSignTemp进行md5 运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

//C)对string1
中的所有键值对中的value 进行urlencode 转码,按照a 步骤重新拼接成字符串,得到string2。对于js 前端程序,一定要使用函数encodeURIComponent 进行urlencode编码(注意!进行urlencode时要将空格转化为%20而不是+)。

//D)将sign=signValue
拼接到string1 后面得到最终的package 字符串。//app_signature生成方法:

//A)参与签名的字段包括:appid、appkey、noncestr、package、timestamp以及
traceid

//B)对所有待签名参数按照字段名的ASCII
码从小到大排序(字典序)后,使用URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。 注意:所有参数名均为小写字符

//C)对string1
作签名算法,字段名和字段值都采用原始值,不进行URL 转义。具体签名算法为SHA1</p>
\

B. 银联在线和支付宝,android应用怎么调用

一、 支付宝平台的集成

在技术集成之前,商户需要在https://ms.alipay.com进行注册,并签约安全支付服务。签约成功后可获取支付宝分配的合作商户ID(PartnerID),账户ID(SellerID),调用接口时使用。

支付细节的实现,主要通过支付宝提供的一个支付安全服务安装包alipay_plugin_20120428msp.apk,首次使用,首先检查是否安装此插件,没有会提示安装。具体的支付细节,在这个插件内完成。大部分的支付平台也都是采用的这种方式。

调用支付宝的接口进行支付,主要有以下几个步骤

1. 将商户ID,收款帐号,外部订单号,商品名称,商品介绍,价格,通知地址封装成订单信息

2. 对订单信息进行签名

3. 将订单信息,签名,签名方式封装成请求参数

4. 调用pay方法。

主要流程图如下:

支付接口pay方法的调用如下:

。。。

// start pay for this order.

// 根据订单信息开始进行支付

try {

// prepare the order info.

// 准备订单信息

String orderInfo = getOrderInfo(position);

// 这里根据签名方式对订单信息进行签名

String signType = getSignType();

String strsign = sign(signType, orderInfo);

Log.v("sign:", strsign);

// 对签名进行编码

strsign = URLEncoder.encode(strsign);

// 组装好参数

String info = orderInfo + "&sign=" + "\"" + strsign + "\"" + "&"

+ getSignType();

Log.v("orderInfo:", info);

// start the pay.

// 调用pay方法进行支付

MobileSecurePayer msp = new MobileSecurePayer();

boolean bRet = msp.pay(info, mHandler, AlixId.RQF_PAY,this);if (bRet) {

// show the progress bar to indicate that we have started

// paying.

// 显示“正在支付”进度条

closeProgress();

mProgress = BaseHelper.showProgress(this,null, "正在支付",false,

true);

} else

;

} catch (Exception ex) {

Toast.makeText(AlixDemo.this, R.string.remote_call_failed,

Toast.LENGTH_SHORT).show();

}

。。。

/**

* 向支付宝发送支付请求

*

* @param strOrderInfo

* 订单信息

* @param callback

* 回调handler

* @param myWhat

* 回调信息

* @param activity

* 目标activity

* @return

*/

public boolean pay(final String strOrderInfo,final Handler callback,

final int myWhat, final Activity activity) {

if (mbPaying)

return false;

mbPaying = true;//

mActivity = activity;// bind the service.

// 绑定服务

if (mAlixPay ==null) {

// 绑定安全支付服务需要获取上下文环境,

// 如果绑定不成功使用mActivity.getApplicationContext().bindService

// 解绑时同理

mActivity.getApplicationContext().bindService(

new Intent(IAlixPay.class.getName()),mAlixPayConnection,

Context.BIND_AUTO_CREATE);

}

// else ok.// 实例一个线程来进行支付

new Thread(new Runnable() {

public void run() {

try {

// wait for the service bind operation to completely

// finished.

// Note: this is important,otherwise the next mAlixPay.Pay()

// will fail.

// 等待安全支付服务绑定操作结束

// 注意:这里很重要,否则mAlixPay.Pay()方法会失败

synchronized (lock) {

if (mAlixPay ==null)

lock.wait();

}// register a Callback for the service.

// 为安全支付服务注册一个回调

mAlixPay.registerCallback(mCallback);// call the MobileSecurePay service.

// 调用安全支付服务的pay方法

String strRet =mAlixPay.Pay(strOrderInfo);

BaseHelper.log(TAG,"After Pay: " + strRet);// set the flag to indicate that we have finished.

// unregister the Callback, and unbind the service.

// 将mbPaying置为false,表示支付结束

// 移除回调的注册,解绑安全支付服务

mbPaying = false;

mAlixPay.unregisterCallback(mCallback);

mActivity.getApplicationContext().unbindService(

mAlixPayConnection);// send the result back to caller.

// 发送交易结果

Message msg = new Message();

msg.what = myWhat;

msg.obj = strRet;

callback.sendMessage(msg);

} catch (Exception e) {

e.printStackTrace();// send the result back to caller.

// 发送交易结果

Message msg = new Message();

msg.what = myWhat;

msg.obj = e.toString();

callback.sendMessage(msg);

}

}

}).start();return true;

}调用了支付服务之后,有两种方式返回交易结果:

1. 支付结果作为接口返回的字符串返回。返回的参数包含在result字符串中,具体再进行解析。

2. 支付宝服务器通知。商户需要提供一个http协议的接口,包含在参数里传递给安全支付,即notify_url。支付宝服务器在支付完成后,会用POST方法调用notufy_url,以xml为数据格式传输支付结果。需要注意的是,商户服务器收到支付宝发的通知之后,需要返回一个纯字符串“success”,不然支付宝的服务器会持续调用七次回调url提供的接口。

集成需要的交易费用方面0-1万元内是2.5%的费率,1-10万是2.4%,10-100万是2.2%,100万以上2.0%。
PS :亲测

AliPayInfo aliPayInfo=new AliPayInfo();
AliPay aliPay=new AliPay((Activity)OtherPayDlg.this.mContext, mHandler);
aliPay.pay(aliPayInfo.toString());
OtherPayDlg.this.dismiss();

出现问题一:按照说明文档导入alipay.jar 出现AliPay 找不到,然后项目根目录下新建一个 libs文件夹,把要加的包放到这个目录下,右键 Build Path -> Use as source folder

成功可以引用,但是没有弹出界面二、 财付通平台的集成

财付通的集成和支付宝的非常相似(腾讯的传统?→_→)。财付通也是提供了一个财付通安全支付服务应用TenpayService.apk用于处理交易的细节。对于此支付应用,财付通和支付宝的使用方式是一样的。一种是捆绑预置,即打包在assets目录下,另一种是放到自己的服务器中,通过检查更新的方式动态加载。实际集成中可采用二者结合方式,初次使用使用预置apk,之后检查更新动态下载。

但是调用支付接口之前,增加了一个获取tokenid的过程,tokenid用于同财付通service进行交互。过程如下:

1. 用户在商户APP 选择商品,使用财付通支付

2. 商户APP向商户server 请求使用财付通支付

3. 商户server按照“支付初始化接口”的要求组织数据请求财付通“支付初始化接口”,接收初始化成功后返回的tokenid

4. 商户server将生成的tokenid 返回给商户APP

5. 商户APP使用tokenid 调用财付通支付service

6. 财付通支付service 在验证tokenid 后向用户展示支付中心,显示订单信息及相关用户信息

7. 用户在支付中心输入支付密码执行支付

8. 财付通支付service 向财付通后台server 请求执行支付,并实时接收支付结果

9. 支付成功后财付通支付service 向用户展示支付成功UI,在用户点击“返回商户网站”后回调商户App

10. 财付通后台server 在支付成功后会通过“支付成功通知接口”在后台通知商户server 支付状态。

接收支付接口返回结果方面,财付通对于方法返回值,不是直接返回的,而是通过handler回调,handler和msgId作为一个参数传入接口,支付接口pay()方法的返回值只是个true false,用于区分调用成功或者失败。其实跟淘宝的方式大同小异。对于notify_url,是财付通是通过get方式调用回调url,只返回支付成功的订单。同样的,商户服务器在接收到财付通的调用之后,需要返回纯字符串“success”“fail”表示处理成功或失败。

调用支付接口的代码如下:

//构造支付参数

HashMap<String, String> payInfo = new HashMap<String, String>();

payInfo.put("token_id",mTokenId); //财付通订单号token_id

payInfo.put("bargainor_id","1234567890"); //财付通合作商户ID,此为演示示例

// payInfo.put("order_type", "1");

payInfo.put("caller","com.tenpay.android.appDemo");//去支付

tenpayHelper.pay(payInfo,mHandler, MSG_PAY_RESULT);

财付通的服务费率是1%,另外有相关的套餐可以优惠。

三、 易宝支付平台集成

与支付宝和财付通不同的是,易宝集成时,并没有提供一个支付应用apk,只有一个jar包。是一个library project。因为在集成时,需要在manifest文件里面声明支付页面的activity。同时在调用支付页面时,需要用startActivityForResult方式进入,支付结果会通过onActivityResult方法返回。易宝同样支持服务端回调,但比较纠结的是,易宝的服务端回调url,不能在代码中传入,需要在易宝的网站进行配置。只有支付成功时才会触发此回调,以get方式调用。

调用支付接口的代码如下:其中customerNumber参数是签约之后才能获取到的。requestId为调用方自定义的订单流水号。

private void startPay(String customerNumber, String chennal) {

String amount = etAmount.getText().toString();

String proctName = etProctName.getText().toString();

String proctDesc = etProctDesc.getText().toString();if(TextUtils.isEmpty(proctName) || TextUtils.isEmpty(amount)) {

Toast.makeText(YeepayExampleActivity.this,"", Toast.LENGTH_SHORT);

}Intent intent = new Intent(getBaseContext(), YeepayPlugin.class);

intent.putExtra("customerNumber", customerNumber);Random random = new Random();

String time = "" + System.currentTimeMillis();

String requestId = time + random.nextInt() % 10000;intent.putExtra("requestId", requestId);

intent.putExtra("amount", amount);

intent.putExtra("proctName", proctName);

intent.putExtra("time", time);

intent.putExtra("proctDesc", (proctDesc ==null) ? "" : proctDesc);

intent.putExtra("support", chennal);

intent.putExtra("environment","ENV_TEST" );

StringBuilder builder = new StringBuilder();

builder.append(CUSTOMER_NUMBER).append("$");

builder.append(requestId).append("$");

builder.append(amount).append("$");

builder.append(proctName).append("$");

builder.append(time);String hmac = YeepayUtils.hmacSign(builder.toString(),KEY);Log.e("YeepayExampleActivity","hmac" + hmac);intent.putExtra("hmac", hmac);

startActivityForResult(intent, 200);

}

易宝集成后的费率需要和易宝的客户经理面谈决定

四、 银联在线支付集成

银联的支付应用同支付宝和财付通相同,采用的是独立apk的方式提供服务。调用支付接口采用的startActivity的方式,相关参数通过bundle传递,调用示例如下:

bundle.putBoolean(USE_TEST_MODE,true);bundle.putString(SP_ID,"0009");

bundle.putString(SECURITY_CHIP_TYPE,null);

bundle.putString(SYS_PROVIDE,"00000001");

bundle.putString(PAY_DATA, payData);



Intent startIntent = new Intent();

// startIntent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);

startIntent.putExtras(bundle);

startIntent.setClassName(UPPayUtils.PACKAGE_NAME,

UPPayUtils.ACTIVITY_NAME);

// activity.startActivityForResult(startIntent, UPPayUtils.STARTE_UPPAY);

activity.startActivity(startIntent);

与以上三种支付平台不同的是,银联支付接口的返回值是通过广播的形式发送的。不支持商户服务端的回调url。

C. 如何在Android应用中实现财付通支付功能

我也在弄的,我觉得应该是需要公司和他们合作之后才给sdk,要不就用java的,但是ios上面就用不了了,也可以用wap方式做的。 查看原帖>>

阅读全文

与财付通androidsdk相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:142
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:732
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:301
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:141
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:890
app转账是什么 浏览:163