這是我設計的一個網站,其中多個商店我可以提供他們的產品出售。每個賣家都會在我的網站上有一個虛擬商店。我使用paypal進行購買操作。我已考慮允許客戶使用信用卡,而無需使用PayPal帳戶,並且我正嘗試使用自適應付款流程以允許「以客人購買」的流量。我試圖使用PayPal默認流量(不是其餘api),因爲我不想擔心處理信用卡數據,並必須將我的網站設計爲符合PCI標準。MVC貝寶自適應付款
所以用這個escenario這裏是我使用的是什麼:
- 從這個網站https://developer.paypal.com/webapps/developer/docs/classic/adaptive-payments/integration-guide/APIntro/我試圖實現對部分指定的付款流程
設置網頁使用燈箱調用嵌入式支付流程
- 由於這種支付流程需要將生成付款密鑰,我使用這個鏈接上找到的代碼:
https://github.com/paypal/rest-api-sdk-dotnet/tree/master/Samples/RestApiSample
- 所以在我的MVC我有一個生成順序的頁面,它會調用Helper方法來獲取paykey。這裏是最相關的一個:
public static string GetPayKey(DummyPurchase purchase)
{
ReceiverList receiverList = new ReceiverList();
receiverList.receiver = new List<Receiver>();
//(Required) Amount to be paid to the receiver
string[] amt = new string[1] { purchase.TotalPrice.ToString() };
// Receiver's email address. This address can be unregistered with paypal.com.
// If so, a receiver cannot claim the payment until a PayPal account is linked
// to the email address. The PayRequest must pass either an email address or a phone number.
// Maximum length: 127 characters
string[] receiverEmail = new string[1] { purchase.StoreId.ToString() };
string cancelUrl = ConfigurationHelper<string>.GetKeyValue(Constants.PAYPAL_CANCEL_URL);
string returnUrl = ConfigurationHelper<string>.GetKeyValue(Constants.PAYPAL_RETURN_URL);
string currency = ConfigurationHelper<string>.GetKeyValue(Constants.PAYPAL_CURRENCY_CODE);
//Generate Receivers list
for (int i = 0; i < amt.Length; i++)
{
Receiver rec = new Receiver(Convert.ToDecimal(amt[i]));
if (receiverEmail[i] != string.Empty)
{
rec.email = receiverEmail[i];
}
receiverList.receiver.Add(rec);
}
PayRequest request = new PayRequest(new RequestEnvelope("en_US"), "PAY",
cancelUrl, currency,
receiverList, returnUrl);
//call the service
AdaptivePaymentsService service = null;
PayResponse response = null;
try
{
// (https://github.com/paypal/sdk-core-dotnet/wiki/SDK-Configuration-Parameters)
Dictionary<string, string> configurationMap = GetAcctAndConfig();
// Creating service wrapper object to make an API call and loading
// configuration map for your credentials and endpoint
service = new AdaptivePaymentsService(configurationMap);
response = service.Pay(request);
}
catch (Exception ex)
{
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(ex));
return "";
}
Dictionary<string, string> responseValues = new Dictionary<string, string>();
string redirectUrl = null;
if (!(response.responseEnvelope.ack == AckCode.FAILURE) &&
!(response.responseEnvelope.ack == AckCode.FAILUREWITHWARNING))
{
return response.payKey;
}
return "";
}
- 後我得到這個關鍵,我從具有形式的API手冊中規定,具有paykey字符串作爲模型對這一觀點的另一個觀點得到HTML。
@model string
<h2>ConfirmCheckout</h2>
<script src="https://www.paypalobjects.com/js/external/dg.js">
</script>
<form action="https://www.paypal.com/webapps/adaptivepayment/flow/pay"
target="PPDGFrame">
<input id="type" type="hidden" name="expType" value="light">
<input id="paykey" type="hidden" name="paykey" value="@Model">
<input type="submit" id="submitBtn" value="Pay with PayPal">
</form>
- 後視圖渲染,我調用JavaScript代碼來啓動流程:
var dgFlow = new PAYPAL.apps.DGFlow({ trigger: 'submitBtn' });
-The流完美的作品,我得到呈現這種形式在一個有效的付款密鑰。但是當我點擊這個按鈕(用paykey提交表單提交按鈕)時,我得到2個不同的錯誤。這是最常見的一種:
此交易已被批准。請訪問您的PayPal賬戶概覽以查看詳細信息。
- 但有時我收到「您的付款會話已過期」錯誤。
我有2個問題:
- 是否有人知道如何解決這些錯誤?
- 我使用clasic API,因爲適應性付款的客人付款流程需要PayKey啓動流程(爲了避免安全和PCI配合問題)。我沒有在Paypal REST API上找到可以獲得相同PayKey的方法。有什麼方法可以獲得這些密鑰?
非常感謝
您可以查看這裏的例子: http://highlightsolutions.com/shoppingcart 商店下拉列表的第一個選項是工作的權利立即生成一個支付鑰匙。 –